Skip to content

Commit 86c4ea2

Browse files
steveyeggeclaude
andcommitted
release: bump version to v0.2.0
- Update version.go to 0.2.0 - Add comprehensive CHANGELOG.md entry for v0.2.0 (178 commits) - Add gt info command with --whats-new flag for agent-relevant changes 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
1 parent 095a426 commit 86c4ea2

File tree

3 files changed

+302
-1
lines changed

3 files changed

+302
-1
lines changed

CHANGELOG.md

Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,121 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## [Unreleased]
99

10+
## [0.2.0] - 2026-01-04
11+
12+
Major release featuring the Convoy Dashboard, two-level beads architecture, and significant multi-agent improvements.
13+
14+
### Added
15+
16+
#### Convoy Dashboard (Web UI)
17+
- **`gt dashboard` command** - Launch web-based monitoring UI for Gas Town (#71)
18+
- **Polecat Workers section** - Real-time activity monitoring with tmux session timestamps
19+
- **Refinery Merge Queue display** - Always-visible MR queue status
20+
- **Dynamic work status** - Convoy status columns with live updates
21+
- **HTMX auto-refresh** - 10-second refresh interval for real-time monitoring
22+
23+
#### Two-Level Beads Architecture
24+
- **Town-level beads** (`~/gt/.beads/`) - `hq-*` prefix for Mayor mail and cross-rig coordination
25+
- **Rig-level beads** - Project-specific issues with rig prefixes (e.g., `gt-*`)
26+
- **`gt migrate-agents` command** - Migration tool for two-level architecture (#nnub1)
27+
- **TownBeadsPrefix constant** - Centralized `hq-` prefix handling
28+
- **Prefix-based routing** - Commands auto-route to correct rig via `routes.jsonl`
29+
30+
#### Multi-Agent Support
31+
- **Pluggable agent registry** - Multi-agent support with configurable providers (#107)
32+
- **Multi-rig management** - `gt rig start/stop/restart/status` for batch operations (#11z8l)
33+
- **`gt crew stop` command** - Stop crew sessions cleanly
34+
- **`spawn` alias** - Alternative to `start` for all role subcommands
35+
- **Batch slinging** - `gt sling` supports multiple beads to a rig in one command (#l9toz)
36+
37+
#### Ephemeral Polecat Model
38+
- **Immediate recycling** - Polecats recycled after each work unit (#81)
39+
- **Updated patrol formula** - Witness formula adapted for ephemeral model
40+
- **`mol-polecat-work` formula** - Updated for ephemeral polecat lifecycle (#si8rq.4)
41+
42+
#### Cost Tracking
43+
- **`gt costs` command** - Session cost tracking and reporting
44+
- **Beads-based storage** - Costs stored in beads instead of JSONL (#f7jxr)
45+
- **Stop hook integration** - Auto-record costs on session end
46+
- **Tmux session auto-detection** - Costs hook finds correct session
47+
48+
#### Conflict Resolution
49+
- **Conflict resolution workflow** - Formula-based conflict handling for polecats (#si8rq.5)
50+
- **Merge-slot gate** - Refinery integration for ordered conflict resolution
51+
- **`gt done --phase-complete`** - Gate-based phase handoffs (#si8rq.7)
52+
53+
#### Communication & Coordination
54+
- **`gt mail archive` multi-ID** - Archive multiple messages at once (#82)
55+
- **`gt mail --all` flag** - Clear all mail for agent ergonomics (#105q3)
56+
- **Convoy stranded detection** - Detect and feed stranded convoys (#8otmd)
57+
- **`gt convoy --tree`** - Show convoy + child status tree
58+
- **`gt convoy check`** - Cross-rig auto-close for completed convoys (#00qjk)
59+
60+
#### Developer Experience
61+
- **Shell completion** - Installation instructions for bash/zsh/fish (#pdrh0)
62+
- **`gt prime --hook`** - LLM runtime session handling flag
63+
- **`gt doctor` enhancements** - Session-hooks check, repo-fingerprint validation (#nrgm5)
64+
- **Binary age detection** - `gt status` shows stale binary warnings (#42whv)
65+
- **Circuit breaker** - Automatic handling for stuck agents (#72cqu)
66+
67+
#### Infrastructure
68+
- **SessionStart hooks** - Deployed during `gt install` for Mayor role
69+
- **`hq-dog-role` beads** - Town-level dog role initialization (#2jjry)
70+
- **Watchdog chain docs** - Boot/Deacon lifecycle documentation (#1847v)
71+
- **Integration tests** - CI workflow for `gt install` and `gt rig add` (#htlmp)
72+
- **Local repo reference clones** - Save disk space with `--reference` cloning
73+
74+
### Changed
75+
76+
- **Handoff migrated to skills** - `gt handoff` now uses skills format (#nqtqp)
77+
- **Crew workers push to main** - Documentation clarifies no PR workflow for crew
78+
- **Session names include town** - Mayor/Deacon sessions use town-prefixed names
79+
- **Formula semantics clarified** - Formulas are templates, not instructions
80+
- **Witness reports stopped** - No more routine Mayor reports (saves tokens)
81+
82+
### Fixed
83+
84+
#### Daemon & Session Stability
85+
- **Thread-safety** - Added locks for agent session resume support
86+
- **Orphan daemon prevention** - File locking prevents duplicate daemons (#108)
87+
- **Zombie tmux cleanup** - Kill zombie sessions before recreating (#vve6k)
88+
- **Tmux exact matching** - `HasSession` uses exact match to prevent prefix collisions
89+
- **Health check fallback** - Prevents killing healthy sessions on tmux errors
90+
91+
#### Beads Integration
92+
- **Mayor/rig path** - Use correct path for beads to prevent prefix mismatch (#38)
93+
- **Agent bead creation** - Fixed during `gt rig add` (#32)
94+
- **bd daemon startup** - Circuit breaker and restart logic (#2f0p3)
95+
- **BEADS_DIR environment** - Correctly set for polecat hooks and cross-rig work
96+
97+
#### Agent Workflows
98+
- **Default branch detection** - `gt done` no longer hardcodes 'main' (#42)
99+
- **Enter key retry** - Reliable Enter key delivery with retry logic (#53)
100+
- **SendKeys debounce** - Increased to 500ms for reliability
101+
- **MR bead closure** - Close beads after successful merge from queue (#52)
102+
103+
#### Installation & Setup
104+
- **Embedded formulas** - Copy formulas to new installations (#86)
105+
- **Vestigial cleanup** - Remove `rigs/` directory and `state.json` files
106+
- **Symlink preservation** - Workspace detection preserves symlink paths (#3, #75)
107+
- **Golangci-lint errors** - Resolved errcheck and gosec issues (#76)
108+
109+
### Contributors
110+
111+
Thanks to all contributors for this release:
112+
- @kiwiupover - README updates (#109)
113+
- @michaellady - Convoy dashboard (#71), ResolveBeadsDir fix (#54)
114+
- @jsamuel1 - Dependency updates (#83)
115+
- @dannomayernotabot - Witness fixes (#87), daemon race condition (#64)
116+
- @markov-kernel - Mayor session hooks (#93), daemon init recommendation (#95)
117+
- @rawwerks - Multi-agent support (#107)
118+
- @jakehemmerle - Daemon orphan race condition (#108)
119+
- @danshapiro - Install role slots (#106), rig beads dir (#61)
120+
- @vessenes - Town session helpers (#91), install copy formulas (#86)
121+
- @kustrun - Init bugs (#34)
122+
- @austeane - README quickstart fix (#44)
123+
- @Avyukth - Patrol roles per-rig check (#26)
124+
10125
## [0.1.1] - 2026-01-02
11126

12127
### Fixed

internal/cmd/info.go

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
package cmd
2+
3+
import (
4+
"encoding/json"
5+
"fmt"
6+
"os"
7+
"strings"
8+
9+
"github.com/spf13/cobra"
10+
)
11+
12+
var infoCmd = &cobra.Command{
13+
Use: "info",
14+
GroupID: GroupDiag,
15+
Short: "Show Gas Town information and what's new",
16+
Long: `Display information about the current Gas Town installation.
17+
18+
This command shows:
19+
- Version information
20+
- What's new in recent versions (with --whats-new flag)
21+
22+
Examples:
23+
gt info
24+
gt info --whats-new
25+
gt info --whats-new --json`,
26+
Run: func(cmd *cobra.Command, args []string) {
27+
whatsNewFlag, _ := cmd.Flags().GetBool("whats-new")
28+
jsonFlag, _ := cmd.Flags().GetBool("json")
29+
30+
if whatsNewFlag {
31+
showWhatsNew(jsonFlag)
32+
return
33+
}
34+
35+
// Default: show basic info
36+
info := map[string]interface{}{
37+
"version": Version,
38+
"build": Build,
39+
}
40+
41+
if commit := resolveCommitHash(); commit != "" {
42+
info["commit"] = shortCommit(commit)
43+
}
44+
if branch := resolveBranch(); branch != "" {
45+
info["branch"] = branch
46+
}
47+
48+
if jsonFlag {
49+
enc := json.NewEncoder(os.Stdout)
50+
enc.SetIndent("", " ")
51+
enc.Encode(info)
52+
return
53+
}
54+
55+
fmt.Printf("Gas Town v%s (%s)\n", Version, Build)
56+
if commit, ok := info["commit"].(string); ok {
57+
if branch, ok := info["branch"].(string); ok {
58+
fmt.Printf(" %s@%s\n", branch, commit)
59+
} else {
60+
fmt.Printf(" %s\n", commit)
61+
}
62+
}
63+
fmt.Println("\nUse 'gt info --whats-new' to see recent changes")
64+
},
65+
}
66+
67+
// VersionChange represents agent-relevant changes for a specific version
68+
type VersionChange struct {
69+
Version string `json:"version"`
70+
Date string `json:"date"`
71+
Changes []string `json:"changes"`
72+
}
73+
74+
// versionChanges contains agent-actionable changes for recent versions
75+
var versionChanges = []VersionChange{
76+
{
77+
Version: "0.2.0",
78+
Date: "2026-01-04",
79+
Changes: []string{
80+
"NEW: Convoy Dashboard - Web UI for monitoring Gas Town (gt dashboard)",
81+
"NEW: Two-level beads architecture - hq-* prefix for town, rig prefixes for projects",
82+
"NEW: Multi-agent support with pluggable registry",
83+
"NEW: gt rig start/stop/restart/status - Multi-rig management commands",
84+
"NEW: Ephemeral polecat model - Immediate recycling after each work unit",
85+
"NEW: gt costs command - Session cost tracking and reporting",
86+
"NEW: Conflict resolution workflow for polecats with merge-slot gates",
87+
"NEW: gt convoy --tree and gt convoy check for cross-rig coordination",
88+
"NEW: Batch slinging - gt sling supports multiple beads at once",
89+
"NEW: spawn alias for start across all role subcommands",
90+
"NEW: gt mail archive supports multiple message IDs",
91+
"NEW: gt mail --all flag for clearing all mail",
92+
"NEW: Circuit breaker for stuck agents",
93+
"NEW: Binary age detection in gt status",
94+
"NEW: Shell completion installation instructions",
95+
"CHANGED: Handoff migrated to skills format",
96+
"CHANGED: Crew workers push directly to main (no PRs)",
97+
"CHANGED: Session names include town name",
98+
"FIX: Thread-safety for agent session resume",
99+
"FIX: Orphan daemon prevention via file locking",
100+
"FIX: Zombie tmux session cleanup",
101+
"FIX: Default branch detection (no longer hardcodes 'main')",
102+
"FIX: Enter key retry logic for reliable delivery",
103+
"FIX: Beads prefix routing for cross-rig operations",
104+
},
105+
},
106+
{
107+
Version: "0.1.1",
108+
Date: "2026-01-02",
109+
Changes: []string{
110+
"FIX: Tmux keybindings scoped to Gas Town sessions only",
111+
"NEW: OSS project files - CHANGELOG.md, .golangci.yml, RELEASING.md",
112+
"NEW: Version bump script - scripts/bump-version.sh",
113+
"FIX: gt rig add and gt crew add CLI syntax documentation",
114+
"FIX: Rig prefix routing for agent beads",
115+
"FIX: Beads init targets correct database",
116+
},
117+
},
118+
{
119+
Version: "0.1.0",
120+
Date: "2026-01-02",
121+
Changes: []string{
122+
"Initial public release of Gas Town",
123+
"NEW: Town structure - Hierarchical workspace with rigs, crews, and polecats",
124+
"NEW: Rig management - gt rig add/list/remove",
125+
"NEW: Crew workspaces - gt crew add for persistent developer workspaces",
126+
"NEW: Polecat workers - Transient agent workers managed by Witness",
127+
"NEW: Mayor - Global coordinator for cross-rig work",
128+
"NEW: Deacon - Town-level lifecycle patrol and heartbeat",
129+
"NEW: Witness - Per-rig polecat lifecycle manager",
130+
"NEW: Refinery - Merge queue processor with code review",
131+
"NEW: Convoy system - gt convoy create/list/status",
132+
"NEW: Sling workflow - gt sling <bead> <rig>",
133+
"NEW: Molecule workflows - Formula-based multi-step task execution",
134+
"NEW: Mail system - gt mail inbox/send/read",
135+
"NEW: Escalation protocol - gt escalate with severity levels",
136+
"NEW: Handoff mechanism - gt handoff for context-preserving session cycling",
137+
"NEW: Beads integration - Issue tracking via beads (bd commands)",
138+
"NEW: Tmux sessions with theming",
139+
"NEW: Status dashboard - gt status",
140+
"NEW: Activity feed - gt feed",
141+
"NEW: Nudge system - gt nudge for reliable message delivery",
142+
},
143+
},
144+
}
145+
146+
// showWhatsNew displays agent-relevant changes from recent versions
147+
func showWhatsNew(jsonOutput bool) {
148+
if jsonOutput {
149+
enc := json.NewEncoder(os.Stdout)
150+
enc.SetIndent("", " ")
151+
enc.Encode(map[string]interface{}{
152+
"current_version": Version,
153+
"recent_changes": versionChanges,
154+
})
155+
return
156+
}
157+
158+
// Human-readable output
159+
fmt.Printf("\nWhat's New in Gas Town (Current: v%s)\n", Version)
160+
fmt.Println(strings.Repeat("=", 50))
161+
fmt.Println()
162+
163+
for _, vc := range versionChanges {
164+
// Highlight if this is the current version
165+
versionMarker := ""
166+
if vc.Version == Version {
167+
versionMarker = " <- current"
168+
}
169+
170+
fmt.Printf("## v%s (%s)%s\n\n", vc.Version, vc.Date, versionMarker)
171+
172+
for _, change := range vc.Changes {
173+
fmt.Printf(" * %s\n", change)
174+
}
175+
fmt.Println()
176+
}
177+
178+
fmt.Println("Tip: Use 'gt info --whats-new --json' for machine-readable output")
179+
fmt.Println()
180+
}
181+
182+
func init() {
183+
infoCmd.Flags().Bool("whats-new", false, "Show agent-relevant changes from recent versions")
184+
infoCmd.Flags().Bool("json", false, "Output in JSON format")
185+
rootCmd.AddCommand(infoCmd)
186+
}

internal/cmd/version.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import (
1111

1212
// Version information - set at build time via ldflags
1313
var (
14-
Version = "0.1.2"
14+
Version = "0.2.0"
1515
// Build can be set via ldflags at compile time
1616
Build = "dev"
1717
// Commit and Branch - the git revision the binary was built from (optional ldflag)

0 commit comments

Comments
 (0)