From 6209a49d545cadfa4712e96c8580c4937a46d340 Mon Sep 17 00:00:00 2001 From: Martin Emde Date: Wed, 7 Jan 2026 19:17:28 -0800 Subject: [PATCH] fix(costs): derive session name for mayor/deacon without GT_TOWN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Error: Ran 1 stop hook ⎿ Stop hook error: Failed with non-blocking status code: Error: --session flag required (or set GT_SESSION env var, or GT_RIG/GT_ROLE) Usage: gt costs record [flags] deriveSessionName() now falls back to gt-{role} when GT_ROLE is mayor or deacon but GT_TOWN is not set. Previously this case returned empty string, causing the Stop hook to fail. --- internal/cmd/costs.go | 10 +++++++--- internal/cmd/costs_test.go | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) 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{},