refactor: remove Gas Town references from codebase

Replace Gas Town-specific terminology with generic orchestrator concepts:
- "Gas Town" → "orchestrator" or "multi-clone"
- Hardcoded ~/gt/ paths → GT_ROOT environment variable
- signalGasTownActivity → signalOrchestratorActivity
- GUPP → hook-based work assignment

Updated 21 files across CHANGELOG, cmd/bd/, internal/, docs/, scripts.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Executed-By: beads/crew/dave
Rig: beads
Role: crew
This commit is contained in:
Steve Yegge
2025-12-30 14:13:32 -08:00
parent 7f95ba714c
commit 5f3cb0fdf3
21 changed files with 75 additions and 88 deletions

View File

@@ -456,7 +456,7 @@ func discoverRigDaemons() []rigDaemon {
// Find town beads directory (uses findTownBeadsDir from create.go)
townBeadsDir, err := findTownBeadsDir()
if err != nil {
fmt.Fprintf(os.Stderr, "Error: not in a Gas Town (%v)\n", err)
fmt.Fprintf(os.Stderr, "Error: not in an orchestrator environment (%v)\n", err)
os.Exit(1)
}

View File

@@ -311,8 +311,8 @@ func CheckCompactionCandidates(path string) DoctorCheck {
}
// resolveBeadsDir follows a redirect file if present in the beads directory.
// This handles Gas Town's redirect mechanism where .beads/redirect points to
// the actual beads directory location.
// This handles the redirect mechanism where .beads/redirect points to
// the actual beads directory location (used in multi-clone setups).
// This is a wrapper around beads.FollowRedirect for use within the doctor package.
func resolveBeadsDir(beadsDir string) string {
return beads.FollowRedirect(beadsDir)

View File

@@ -32,7 +32,7 @@ The Rig → Cook → Run lifecycle:
Search paths (in order):
1. .beads/formulas/ (project)
2. ~/.beads/formulas/ (user)
3. ~/gt/.beads/formulas/ (town)
3. $GT_ROOT/.beads/formulas/ (orchestrator, if GT_ROOT set)
Commands:
list List available formulas from all search paths
@@ -48,7 +48,7 @@ var formulaListCmd = &cobra.Command{
Search paths (in order of priority):
1. .beads/formulas/ (project - highest priority)
2. ~/.beads/formulas/ (user)
3. ~/gt/.beads/formulas/ (town)
3. $GT_ROOT/.beads/formulas/ (orchestrator, if GT_ROOT set)
Formulas in earlier paths shadow those with the same name in later paths.
@@ -359,8 +359,11 @@ func getFormulaSearchPaths() []string {
// User-level formulas
if home, err := os.UserHomeDir(); err == nil {
paths = append(paths, filepath.Join(home, ".beads", "formulas"))
// Gas Town formulas
paths = append(paths, filepath.Join(home, "gt", ".beads", "formulas"))
}
// Orchestrator formulas (via GT_ROOT)
if gtRoot := os.Getenv("GT_ROOT"); gtRoot != "" {
paths = append(paths, filepath.Join(gtRoot, ".beads", "formulas"))
}
return paths

View File

@@ -187,7 +187,7 @@ Installed hooks:
- post-merge: Import JSONL after pull/merge
- pre-push: Prevent pushing stale JSONL
- post-checkout: Import JSONL after branch checkout
- prepare-commit-msg: Add agent identity trailers (for Gas Town agents)`,
- prepare-commit-msg: Add agent identity trailers (for orchestrator agents)`,
Run: func(cmd *cobra.Command, args []string) {
force, _ := cmd.Flags().GetBool("force")
shared, _ := cmd.Flags().GetBool("shared")
@@ -694,7 +694,7 @@ type agentIdentity struct {
// detectAgentIdentity returns agent identity if running in agent context.
// Returns nil if not in an agent context (human commit).
func detectAgentIdentity() *agentIdentity {
// Check GT_ROLE environment variable first (set by Gas Town sessions)
// Check GT_ROLE environment variable first (set by orchestrator sessions)
gtRole := os.Getenv("GT_ROLE")
if gtRole != "" {
return parseAgentIdentity(gtRole)

View File

@@ -307,7 +307,7 @@ var versionChanges = []VersionChange{
"NEW: bd human command - Focused help menu for humans",
"NEW: bd show --short - Compact output mode for scripting",
"NEW: bd delete --reason - Audit trail for deletions",
"NEW: 'hooked' status - GUPP work assignment for Gas Town",
"NEW: 'hooked' status - Hook-based work assignment for orchestrators",
"NEW: mol_type schema field - Molecule classification tracking",
"FIX: --var flag allows commas in values (GH#786)",
"FIX: bd sync in bare repo worktrees (GH#785)",
@@ -327,7 +327,7 @@ var versionChanges = []VersionChange{
"NEW: bd where command - Show active beads location after following redirects",
"NEW: --parent flag for bd update - Reparent issues between epics",
"NEW: Redirect info in bd prime - Shows when database is redirected",
"FIX: bd doctor follows redirects - Gas Town compatibility",
"FIX: bd doctor follows redirects - Multi-clone compatibility",
"FIX: Remove 8-char prefix limit - bd rename-prefix allows longer prefixes",
"CHANGED: Git context consolidation - Internal refactor for efficiency",
"DOCS: Database Redirects section - ADVANCED.md documentation",

View File

@@ -9,17 +9,17 @@ import (
"github.com/spf13/cobra"
)
// mailCmd delegates to an external mail provider (e.g., gt mail)
// mailCmd delegates to an external mail provider.
// This enables agents to use 'bd mail' consistently, while the actual
// mail implementation is provided by the orchestrator (Gas Town, etc.)
// mail implementation is provided by the orchestrator.
var mailCmd = &cobra.Command{
Use: "mail [subcommand] [args...]",
Short: "Delegate to mail provider (e.g., gt mail)",
Long: `Delegates mail operations to an external mail provider.
Agents often type 'bd mail' when working with beads, but mail functionality
is typically provided by an orchestrator like Gas Town (gt). This command
bridges that gap by delegating to the configured mail provider.
is typically provided by the orchestrator. This command bridges that gap
by delegating to the configured mail provider.
Configuration (checked in order):
1. BEADS_MAIL_DELEGATE or BD_MAIL_DELEGATE environment variable

View File

@@ -147,8 +147,8 @@ var rootCmd = &cobra.Command{
// Set up signal-aware context for graceful cancellation
rootCtx, rootCancel = signal.NotifyContext(context.Background(), os.Interrupt, syscall.SIGTERM)
// Signal Gas Town daemon about bd activity (best-effort, for exponential backoff)
defer signalGasTownActivity()
// Signal orchestrator daemon about bd activity (best-effort, for exponential backoff)
defer signalOrchestratorActivity()
// Apply verbosity flags early (before any output)
debug.SetVerbose(verboseFlag)

View File

@@ -44,31 +44,15 @@ const (
GroupIntegrations = "integrations"
)
// signalGasTownActivity writes an activity signal for Gas Town daemon.
// signalOrchestratorActivity writes an activity signal for orchestrator daemon.
// This enables exponential backoff based on bd usage detection.
// Best-effort: silent on any failure, never affects bd operation.
func signalGasTownActivity() {
// Determine town root
// Priority: GT_ROOT env > detect from cwd path > skip
func signalOrchestratorActivity() {
// Determine town root from environment
// Priority: GT_ROOT env > skip (no default path detection)
townRoot := os.Getenv("GT_ROOT")
if townRoot == "" {
// Try to detect from cwd - if under ~/gt/, use that as town root
home, err := os.UserHomeDir()
if err != nil {
return
}
gtRoot := filepath.Join(home, "gt")
cwd, err := os.Getwd()
if err != nil {
return
}
if strings.HasPrefix(cwd, gtRoot+string(os.PathSeparator)) {
townRoot = gtRoot
}
}
if townRoot == "" {
return // Not in Gas Town, skip
return // Not in orchestrator environment, skip
}
// Ensure daemon directory exists

View File

@@ -20,8 +20,8 @@ var migrateSyncCmd = &cobra.Command{
This command configures the repository to commit .beads changes to a separate
branch (e.g., "beads-sync") instead of the current working branch. This is
essential for multi-clone setups like Gas Town where multiple clones work
independently but need to sync beads data.
essential for multi-clone setups where multiple clones work independently
but need to sync beads data.
The command will:
1. Validate the current state (not already configured, not on sync branch)

View File

@@ -34,7 +34,7 @@ The squash operation:
AGENT INTEGRATION:
Use --summary to provide an AI-generated summary. This keeps bd as a pure
tool - the calling agent (Gas Town polecat, Claude Code, etc.) is responsible
tool - the calling agent (orchestrator worker, Claude Code, etc.) is responsible
for generating intelligent summaries. Without --summary, a basic concatenation
of child issue content is used.