Gas Town v0.6.0
Pre-compiled binaries for Linux, macOS (Intel & Apple Silicon), and Windows.
Installation
Homebrew (macOS/Linux):
brew install gastownnpm (Node.js):
npm install -g @gastown/gtManual Install:
Download the appropriate binary for your platform below, extract it, and place it in your PATH.
Changelog
Features
- cf3055c Merge PR #1195: feat(dashboard): show convoy titles alongside IDs
- 346ddaa feat(compact): add compaction reporting with daily digest and weekly rollup
- 847d0b9 feat(config): add LintCommand/BuildCommand fields and parameterize formulas
- 0792a09 feat(convoy): add --merge flag to gt convoy create and gt sling
- b5a1ed7 feat(convoy): add --owned flag to gt convoy create and gt sling
- 955da9c feat(convoy): push completion notifications to active Mayor session
- ab3995d feat(daemon): add Mayor to daemon supervision
- 67194fa feat(daemon): add exponential backoff for agent restarts (#687)
- cad33ca feat(daemon): add launchd/systemd supervision support (#681)
- 8b6b6be feat(dashboard): add interactive command palette, mail compose, and API performance (#1018)
- 3382a94 feat(dashboard): comprehensive UX overhaul with crew notifications
- bb562b0 feat(dashboard): show convoy titles alongside IDs
- 8dcd12b feat(deacon): add feed-stranded-convoys step to patrol (#1092)
- fd3342f feat(deacon): auto re-dispatch recovered beads from dead polecats
- 8f88e30 feat(doctor): add --slow flag to highlight slow checks
- feab016 feat(doctor): add beads-sync worktree health check (#796)
- ff2c5fe feat(doctor): add beads-sync worktree health check (gt-mihct)
- 72d20e2 feat(doctor): add database-prefix check for rig config mismatch (#1030)
- 9a721e8 feat(doctor): add migration readiness checks for SQLite to Dolt migration
- bf3296e feat(doctor): add rig-name-mismatch check (#1137)
- 6a5261e feat(doctor): add stale-agent-beads check for removed crew (#1036)
- 5c7e6c4 feat(doctor): add stale-beads-redirect check
- eec8b91 feat(doctor): add streaming output for real-time check progress
- 4500f19 feat(doctor): add timing display for slow checks (#995)
- 931b27e feat(doctor): distinguish fixed vs unfixed in --fix output
- 0e2ba67 feat(doctor): extend stale-beads-redirect to verify redirect topology
- f78ea7f feat(dog): add 'gt dog done' command for dogs to return to idle
- a682569 feat(dog): add dog template and update convoy-feed formula
- ebb8e42 feat(dog): add gt dog done command for returning to idle (#1001)
- 0da8dad feat(dog): add session management and delayed dispatch (#1015)
- 2ee5e1c feat(dolt): add gt dolt command for server management
- a5b61ad feat(dolt): add gt dolt sync command for DoltHub remote push (#1324)
- 912ba2f feat(dolt): add max-connections and admission control to prevent connection storms (gt-1obzke)
- 580e195 feat(dolt): auto-create DoltHub repos and configure remotes (#1416)
- 12ecab3 feat(formula): add Go text/template rendering for convoy prompts
- 92bff20 feat(formula): add Go text/template rendering for convoy prompts (#962)
- c1b106c feat(formula): add mol-migration formula for agent-managed upgrades (gt-a7fq)
- 72fc070 feat(formula): add mol-migration formula for v0.5.0 → v0.6.0 upgrade (gt-abomd)
- 581ab8b feat(formula): add mol-migration formula for v0.5.0 → v0.6.0 upgrade (gt-abomd, gt-a7fq)
- 1346116 feat(formulas): add wisp_type=patrol to patrol formulas (gt-7mqd.3)
- 7f3cf26 feat(handoff): add --auto flag for PreCompact auto-handoff
- c241e01 feat(hook): add 'gt hook clear' as alias for 'gt unhook' (gt-fu8t)
- c62d4da feat(hooks): add centralized hook management skeleton and data model (gt-ja40n)
- 5b41eab feat(hooks): add sync command and centralized hook management (gt-pga9m, gt-ja40n.2)
- 15429af feat(hooks): implement sync, diff, list, and merge logic (gt-ja40n)
- 76db656 feat(hooks): integrate hooks with rig add, doctor, and add init command (gt-9pwyj)
- 27ad03a feat(install): fold Dolt identity, HQ database, and server start into gt install (#1447)
- c493c92 feat(krc): add Key Record Chronicle for TTL-based ephemeral data lifecycle
- 37feff8 feat(krc): add forensic value decay model and auto-prune scheduling (gt-krc)
- 07ebc1a feat(make): check repo is up-to-date before install
- 7eb364f feat(molecule): add DAG visualization command (gt mol dag)
- 4493eba feat(molecule): add DAG visualization command (gt mol dag) (#980)
- 4435655 feat(nudge): add --if-fresh flag to suppress compaction nudges
- 2b18544 feat(opencode): add compaction and session lifecycle handlers
- a543ee5 feat(patrol): implement fan-out/gather pattern for parallel steps
- 835a4bb feat(patrol): implement fan-out/gather pattern for parallel steps (#979)
- 9dcddaf feat(polecat): add explicit lint/test step to decommission checklist (#934)
- 12ade34 feat(prime): add compact/resume detection for lighter post-compaction prime
- e644076 feat(prime): add role-aware command quick-reference to gt prime output (gt-up10)
- 87d7347 feat(release): add newsletter generator to gastown-release formula
- 5f7c165 feat(rig): add --adopt flag to register existing directories
- 2eb11ce feat(rig): copy overlay files to refinery during rig creation
- 7d5b145 feat(rig): copy overlay files to refinery during rig creation (#1069)
- a660924 feat(session): add GIT_CEILING_DIRECTORIES to prevent umbrella commits (#1114)
- 212b6af feat(signal): add gt signal stop — Stop hook handler for turn-boundary messaging
- 92ccacf feat(sling): add --no-merge flag to skip merge queue (#939)
- db02dd8 feat(startup): add nudge fallback for non-hook agents (#978) (#1029)
- baf9311 feat(theme): add dark mode CLI theme support (#911)
- 2ce42ea feat(tmux): add C-b g keybinding for agent switcher menu (#1111)
- 429f8e9 feat(tmux): enable clipboard integration in mayor sessions
- aca7532 feat(web): comprehensive dashboard control panel with 13 data panels (#931)
- 5a61fd5 feat(wisp): add promotion criteria helpers for compaction (gt-7mqd.10)
- c260bde feat(witness): implement MERGE_READY protocol for event-driven refinery processing
- 4fe389c feat(witness): reset abandoned beads when dead polecat detected
- 84d455d feat: Add GT_COMMAND env var for configurable CLI name
- 096c968 feat: Allow repo-specific .claude files (#550)
- bfd2f2d feat: add --dry-run to gt dolt migrate (gt-kscdo)
- 014b22e feat: add --stdin flag to gt escalate, warrant file, mq reject
- 3f63d24 feat: add --stdin flag to gt handoff --message for shell-quoting-safe message bodies
- 7a0b9e1 feat: add --stdin flag to gt mail send for shell-quoting-safe message bodies
- be02310 feat: add --stdin flag to gt nudge --message for shell-quoting-safe message bodies
- ceb084c feat: add --stdin flag to gt sling --message and --args
- 6b263ae feat: add CONTEXT.md auto-injection to gt prime
- 6a2dd9a feat: add Dolt server resource monitoring to daemon health check (gt-wsfzka)
- c803285 feat: add Dolt-only guardrails to prevent SQLite from sneaking back
- b2d64b3 feat: add PID tracking for spawned agents (gt-430oy)
- a816236 feat: add RigState type with constants and validation (gt-4p791p.10)
- 1c64afe feat: add ZFC-compliant queue health visibility for Witness patrols
- cd467de feat: add agent ID validation and simplify patrol/convoy formulas
- 119c38f feat: add complete CRUD API for rig beads to match Group pattern (gt-4p791p.8)
- ceb2fb5 feat: add dolt_remotes patrol for periodic push to git remotes
- faa148c feat: add file locking to crew/ package to prevent race conditions (gt-m1aj1)
- a558f2f feat: add gt dog clear and gt warrant commands (#1127)
- 6a9bb02 feat: add gt dolt rollback command for migration backup restoration
- d7678aa feat: add gt prime as step 1 in startup protocol, add Landing the Plane session end protocol
- 9d54eac feat: add gt run-migration command for orchestrated SQLite-to-Dolt migration (gt-wo1py)
- d7533f6 feat: add interactive convoy management to dashboard #1288 (#1340)
- 870ef30 feat: add interactive hook management to dashboard Hooks panel (#1341)
- 201df81 feat: add issue management actions to Work panel detail view #gt-spw (#1342)
- 3120578 feat: add migration hardening agent team setup
- 7cf6e82 feat: add migration test harness scripts (gt-lx5b)
- 4291fae feat: add mol-wisp-compact formula and deacon patrol integration (gt-7mqd.7, gt-7mqd.8)
- 2bbf872 feat: add proactive Dolt server health alerting to daemon (gt-br4zdu)
- 2c78f6f feat: add role bead TTL override support for wisp compaction (gt-7mqd.5)
- 91ef875 feat: add safety checks to gt convoy close with --force override
- 2944c3e feat: add sling buttons to dashboard work panel and issue rows (#gt-kb1) (#1339)
- 3541933 feat: add wisp_type='gc_report' to mol-session-gc formula (gt-hp5p)
- cf09e85 feat: agent beads as persistent identity, not lifecycle artifacts (gt-fkgda)
- 47871fd feat: agent-agnostic command provisioning (#1099)
- c78c4af feat: branch-per-polecat for Dolt write isolation (gt-twqgs)
- 6af0f8d feat: centralize hardcoded timeouts and thresholds into TownSettings config
- de1ca7e feat: detect and clean up orphaned databases in .dolt-data/
- 535db34 feat: enhanced command palette with autocomplete, recent history, and contextual suggestions (gt-ggl) (#1365)
- 42c6573 feat: enrich gt convoy list --json with tracked issues and completion counts
- 7705a4b feat: implement gt compact command for TTL-based wisp compaction (gt-7mqd.6)
- d6b08ae feat: implement gt rig settings command
- 5ee9abc feat: make integration branches end-to-end across the pipeline
- 9a8ae05 feat: priority-based mail notification framing to prevent agent derailment (#1256)
- e868037 feat: replace 10s polling with SSE for real-time dashboard updates (gt-tjy) (#1352)
- 853531e feat: replace Mayor "does NOT edit code" with balanced sling-vs-fix guidance
- 07e3011 feat: update liftoff test timestamp in manager.go (gt-iva20)
- adf41b4 feat: update to use core tap for gastown installation (#872)
Bug Fixes
- 2636de6 Merge PR #1110: fix(ci): use make build for integration tests
- 24f8687 Merge PR #1172: fix(done): retry molecule close with exponential backoff
- 5fb1a2b Merge PR #1193: fix(boot): skip IDLE_CHECK when Deacon is in await-signal backoff
- 9742a58 Merge PR #1196: fix(web): remove os.Executable() to prevent test fork bomb
- 227a664 Merge PR #1198: fix(witness): add await-signal backoff to prevent tight loop when idle
- 1796c0d Merge PR #1204: fix: parameterize target branch in refinery patrol formula
- 83d3982 Merge PR #1205: fix(role): remove incorrect /rig suffix from crew/polecat paths
- 37e1cb4 Merge PR #1225: fix(skill): Update handoff skill to always collect state
- b7c5811 Merge PR #1236: fix: doctor env-vars false positive for boot session
- df128b0 Merge PR #1238: fix: prevent duplicate patrol wisps by checking hooked status
- df40bea Merge PR #1241: fix: preserve --agent override across handoff
- a7c3a9b Merge PR #1251: fix: remove .beads/ from gitignore required patterns
- 4e6544f Merge PR #1259: fix(crew): sync remotes from mayor/rig when creating crew clones
- 423cd78 Merge PR #1280: fix: prevent feed curator OOM and unbounded file growth (#1233)
- fc426ef Revert "Revert "fix(tui): add timeout to CombinedSource fan-in goroutines to …" (#1435)
- f759ed0 Revert "fix(tui): add timeout to CombinedSource fan-in goroutines to prevent …" (#1434)
- ca42177 fix(activity): relax dashboard thresholds (green <5m, yellow 5-10m)
- 4590e98 fix(api): add input validation and tests for issue creation
- 28023db fix(beads): add flock-based locking to AttachMolecule/DetachMolecule (gt-5xhzs)
- e781f2c fix(beads): fix findTownRoot and absolute path handling in rig scanning
- 5e2d54c fix(beads): prefer named-role over rig-level-role in right-scan parse
- e2116bb fix(beads): redirect to mayor/rig/.beads when rig root has no database
- 8283f98 fix(beads): reject flag-like titles to prevent garbage bead creation (gt-e0kx5)
- 05f7d82 fix(beads): try reopen on any create failure instead of parsing errors
- edb948e fix(boot): add idle detection to triage for alive-but-not-patrolling Deacon (#1125)
- dcc5825 fix(boot): detect stale molecule progress for idle Deacon
- c8663d2 fix(boot): ensure Boot is ephemeral (fresh each tick) (#1126)
- a59a60d fix(boot): move backoff check above hook-empty check in degraded triage
- 1c98bc8 fix(boot): skip IDLE_CHECK when Deacon is in await-signal backoff
- 3f1aa5f fix(boot): skip IDLE_CHECK when Deacon is in await-signal backoff
- 9f64d4c fix(boot): use flock instead of session check in AcquireLock (#1123)
- a7a23b1 fix(boot): wire Boot into GUPP startup pipeline (#1370)
- b1e8b11 fix(build): error on raw go build, require make build
- e937717 fix(build): make install now properly builds, signs, and installs to ~/.local/bin
- 2f0f076 fix(build): use GT_ROOT for build error path hint
- e88981d fix(ci): add MSYS2 mingw64 to PATH for Windows test step
- bcf8bf1 fix(ci): copy built binary to GOPATH/bin for PATH discovery
- c19f186 fix(ci): install ICU and GCC for Windows dolt CGo build (#1309)
- 93272c8 fix(ci): install ICU headers for Windows dolt CGo build
- efe31e0 fix(ci): install mingw64 gcc toolchain alongside ICU
- 4aadf65 fix(ci): resolve lint errors and sync embedded formulas
- 59d8a9a fix(ci): use make build for integration tests
- d9f1fe9 fix(cmd): add more commands to beads version exempt list
- c4d8e26 fix(cmd): exempt most commands from beads version check
- d80dd53 fix(cmd): handle --help for commands with DisableFlagParsing
- 75ec5b1 fix(cmd): handle --help for commands with DisableFlagParsing (#1003)
- 1b24651 fix(cmd): improve checkHelpFlag to avoid false positives
- 1ee3018 fix(cmd): replace os.Exit() calls with SilentExitError to allow deferred cleanup
- 8e86d0b fix(cmd): update stale os.Exit comment in done.go
- fa1c2d2 fix(config): Respect --agent override when town root not found
- 6f4031b fix(config): auto-fill Hooks and Env defaults in fillRuntimeDefaults
- c911fd8 fix(config): inject --settings flag for roles with mismatched session directories
- 065d428 fix(config): preserve all RuntimeConfig fields in fillRuntimeDefaults (#971)
- 73d2f83 fix(config): replace all LoadRuntimeConfig usages with ResolveRoleAgentConfig
- 52588f2 fix(config): separate heartbeat/mayor thresholds from worker stale threshold
- 307d6f7 fix(config): skip --settings flag injection for non-Claude agents (#1369)
- ea511f9 fix(config): use --prompt flag for opencode in BuildCommandWithPrompt
- f7082cb fix(config): use GT_ROOT from envVars before cwd detection in startup commands (#1391)
- 8247c9e fix(convoy): auto-close empty 0/0 convoys and require tracked issues on create
- 73019a8 fix(convoy): auto-convoy tracking link broken for cross-rig beads
- ecf0d7a fix(convoy): detect orphaned molecules as stranded (#1118)
- 73d577e fix(convoy): ensure custom types registered before creating convoy
- 5e757d5 fix(convoy): replace sqlite3 CLI calls with bd commands for dolt compatibility (G4)
- 9fb8d25 fix(convoy): use issue-level blocked state for stranded detection (#1358)
- a86c7d9 fix(costs): read token usage from Claude Code transcripts instead of tmux (#941)
- 7fde15a fix(crew): sync remotes from mayor/rig when creating crew clones
- 082aaaa fix(daemon): PATCH-005 heartbeat age check + PATCH-006 PATH resolution
- 1e5c9be fix(daemon): check flock status instead of file existence in isShutdownInProgress (#1117)
- e256fa4 fix(daemon): clean up errant .beads in town-level service directories (#1113)
- 45ffac6 fix(daemon): cross-platform build for Dolt server management
- 1549560 fix(daemon): faster Deacon recovery via reduced thresholds (PATCH-002)
- 6acd75c fix(daemon): kill stale agent sessions when patrols are disabled (hq-2mstj)
- baec5b6 fix(daemon): respect rig bead docked status in isRigOperational
- 46ff998 fix(daemon): respect rigs filter in patrol config
- aa7656e fix(dashboard): distinguish crew from polecats in Workers panel
- 232fc79 fix(dashboard): filter polecats by registered rigs
- 85c2933 fix(dashboard): use townRoot for bd commands in cross-rig routing (#1161)
- 9fc3690 fix(deacon): PATCH-010 add global respawn hook for reliability
- 8e73936 fix(deacon): PATCH-010 auto-respawn on crash
- 07af026 fix(deacon): improve session stability with startup consistency (#1156)
- 349cee1 fix(deacon): prevent session-started nudges from resetting await-signal backoff
- c4f0305 fix(deacon): remove session-started nudge from static config templates
- 21e464d fix(deacon): update heartbeat on every startup, including resume (#1119)
- be0a064 fix(doctor): add bare-repo-exists check to detect broken worktree references (gt-fmnml)
- fc60966 fix(doctor): add verbose logging for unexpected errors in redirect topology check
- 8959554 fix(doctor): add worktree-gitdir-valid check for broken .repo.git references
- 37c2db9 fix(doctor): address PR review feedback for stale-beads-redirect check
- e2c0d31 fix(doctor): allow identity anchor CLAUDE.md at town root
- d9d239a fix(doctor): continue on error in agent/rig bead fix methods (#1318)
- d001e74 fix(doctor): correct shell integration install hint
- 3bd6da6 fix(doctor): detect and fix suboptimal routes that rely on beads redirect (#1441)
- 4c3a17d fix(doctor): exclude closed beads from stale-agent-beads detection
- 0cd8bc8 fix(doctor): exclude closed beads from stale-agent-beads detection
- d7d84ca fix(doctor): extend rig layout detection to PrefixMismatchCheck, add safety
- 9db9fc2 fix(doctor): implement Fix for misclassified-wisps check (#878)
- 7e6b88e fix(doctor): make claude-settings check respect gitignored files
- 74654ce fix(doctor): run bd from rig directory in DatabasePrefixCheck
- b5e6eef fix(doctor): show wrench icon for fixed items in streaming output
- 00a4e40 fix(dog): add name validation to prevent path traversal and empty-name deletion (gt-6cft8)
- fe44fd2 fix(dog): migrate from claude.EnsureSettingsForRole to runtime.EnsureSettingsForRole
- 3ccc609 fix(dog): use IsAgentAlive for agent-agnostic zombie detection
- d9af5a5 fix(dog): use correct method name IsAgentRunning instead of IsClaudeRunning
- 6a7a660 fix(dolt): harden database verification for correctness and resilience
- a9b6431 fix(dolt): prevent read-only mode under concurrent load (gt-lfc0d)
- 203daad fix(dolt): verify databases are served after migration and start (#1319)
- 9ed9d3a fix(doltserver): follow .beads/redirect in FindMigratableDatabases (#1040)
- e54a255 fix(doltserver): validate empty rigName and townRoot in FindRigBeadsDir
- 8cde4a3 fix(done): bare-repo push fallback and post-push verification (#1349)
- b4976c2 fix(done): close issue on no-op completion, prevent formula change discard (G15+G16)
- 92b9915 fix(done): force-close issue on no-op completion to bypass molecule deps
- e23bc50 fix(done): prevent zombie polecats with done-intent labels, deferred kill, and soft errors
- ce0e958 fix(done): retry molecule close with exponential backoff
- 74ed5e2 fix(done): use explicit refspec to push polecat branch, not to main
- c8ef15d fix(e2e): adapt containerized tests for current codebase
- 6268e31 fix(formula): add missing skipped_count variable declaration
- 9515aec fix(formula): add missing variable declarations to formulas (#1133) (#1134)
- 35b759a fix(formula): declare computed template variables and fix TOML parse errors
- 8034a08 fix(formula): remove idle polecat references from mol-convoy-feed
- 7544537 fix(formula): restore deacon patrol changes overwritten by go generate (#1386)
- 3b1d7c3 fix(formulas): add bd sync calls to ensure status updates are persisted
- a9a1cf1 fix(git): add periodic cleanup of stale local polecat tracking branches (gt-gsakye)
- 489053d fix(git): preserve symlinks when moving directories across filesystems
- 859a2c3 fix(git): preserve symlinks when moving directories across filesystems (#1057)
- 9d88259 fix(git): remove duplicate ls-remote call in BranchPushedToRemote
- 7338319 fix(git): use RemoteDefaultBranch() instead of hardcoded 'main' in BranchCreatedDate
- 1dc660c fix(git): use post-checkout for branch protection (git has no pre-checkout)
- 0c791a4 fix(handoff): don't KillPaneProcesses on self-handoff
- 36c7222 fix(handoff): preserve tmux session by setting remain-on-exit before kill
- 7926d7b fix(handoff): prevent self-kill during gt handoff (#881) (#882)
- 177094a fix(handoff): remove KillPaneProcessesExcluding race condition
- f635555 fix(hook): complete convoy hooking implementation (#897)
- 809b0eb fix(hook): fall back to GT_ROLE when cwd detection fails
- d043e01 fix(hook): persist hook_bead on agent bead when hooking work
- 653583b fix(hook): persist hook_bead on agent bead when hooking work
- e3d2b95 fix(hooks): add PreToolUse guards to match EnsureSettingsAt templates
- e89fedb fix(hooks): add deacon nudge to DefaultBase SessionStart hook
- b158ff2 fix(hooks): allow tag pushes in pre-push hook
- 493507a fix(hooks): discover crew-level and polecats-level settings
- bfc8285 fix(hooks): per-matcher merge logic, error handling, rename runHooksList
- 45371dd fix(hooks): unify type systems, fix list alignment, add tests (gt-ja40n.3, gt-ja40n.4)
- 4133d48 fix(hooks): use MarshalSettings in tests instead of json.Marshal
- 1acf754 fix(hooks): use approve instead of allow for Stop hook decision
- d820a7e fix(install): refuse to create HQ inside existing workspace
- 543d119 fix(krc): resolve conflict markers from PR #1112
- 4d1d385 fix(lint): address errcheck, gosec, and unparam warnings
- 4b62556 fix(lint): address errcheck, gosec, and unparam warnings
- c37ab81 fix(lint): address errcheck, gosec, and unparam warnings
- 2c57df3 fix(lint): remove unused issueID param from parseIssueShowJSON
- 71077e9 fix(mail): filter by read status in ListUnread for beads mode (#936)
- db60489 fix(mail): handle crew/polecat ambiguity in notification session lookup (#914)
- 3822400 fix(mail): handle hq- prefix in agentBeadIDToAddress
- 82904fa fix(mail): handle hq- prefix in agentBeadIDToAddress (#1009)
- 75739cb fix(mail): handle hq- prefixed agent IDs in recipient validation
- f41de0d fix(mail): mark messages as read when viewed via gt mail read
- 0e0547b fix(mail): prevent message type failures (#960)
- 47cd7aa fix(mail): remove unused error return from isRecipientMuted (gt-ow2gb)
- 8a9738e fix(mail): resolve cross-rig agent addresses when description is missing (#1385)
- 7946b14 fix(mail): resolve sender identity from .gt-agent metadata (#1208)
- 16bff91 fix(mail): search rig-level beads when resolving agent addresses
- c6a8d44 fix(mail): soften inject wording so agents process mail before going idle (gt-9xfn) (#1414)
- af18b40 fix(mail): use -- separator before subject in bd create calls
- 4e4824a fix(mail): validate recipient exists before sending (#886)
- fb4e292 fix(mail): validate rig-level agent recipients (#1013)
- 3aafa0e fix(mayor): run session from mayorDir instead of townRoot
- 3da0d5a fix(molecule): use Dependencies from bd show instead of empty DependsOn (#901)
- 63d60f1 fix(namepool): display correct theme from config.json (#890)
- 6d32c62 fix(npm): use NPM_TOKEN for npm publish authentication
- b4399bb fix(nudge): correct backoff cap, reduce retry timeout, improve tests
- ea765f9 fix(nudge): resolve short addresses by trying crew then polecat
- 3eca275 fix(nudge): retry on transient "not in a mode" errors during startup
- 3442471 fix(orphan): protect all tmux sessions, not just Gas Town ones (#924)
- 82d84b2 fix(orphan): skip IDE extension processes (VS Code, Cursor) in cleanup
- e35d64a fix(orphan): skip interactive terminal sessions in zombie cleanup
- 3c14ef6 fix(patrol): hook new wisp after squash in witness and refinery formulas (#1372)
- 7a67dc0 fix(patrol): use gt convoy commands instead of bd list for town-aware convoy detection (#1106)
- 8753219 fix(polecat): clean up orphan state during name pool reconciliation
- 936fd41 fix(polecat): clean up orphan state during name pool reconciliation (#1073)
- acc720e fix(polecat): clean up polecatDir when worktree creation fails (#1144)
- 464c912 fix(polecat): close open MRs before nuking to prevent orphaned queue entries
- 212f08a fix(polecat): detect when shell is cd'd into worktree before nuke (#969)
- ef42507 fix(polecat): emphasize bd ready and molecule steps in template
- bebf425 fix(polecat): kill orphaned Claude processes when nuking polecats
- e6cdb2d fix(polecat): prevent orphaned hooked work during concurrent sling (#1122)
- afbcefb fix(polecat): resolve cross-rig beads in session manager (#1056) (#1130)
- ccd0700 fix(polecat): transition issue from hooked to in_progress on polecat start (#1149)
- 30e61fb fix(polecat): use ResolveRoleAgentConfig for proper role_agents resolution
- c72c117 fix(polecat): verify and force removal of worktree directories during nuke
- 71c8655 fix(polecat): verify and force removal of worktree directories during nuke (#1074)
- b4212f1 fix(polecat): verify worktree creation in SpawnPolecatForSling
- 943a886 fix(polecat): verify worktree creation in SpawnPolecatForSling (#1072)
- f276b9d fix(prime): show molecule instructions BEFORE bare bead instructions (#920)
- c80eb4e fix(priming): add town root CLAUDE.md to gt install and gt doctor
- b050acf fix(ready): filter identity beads from bd ready output, simplify formulas
- b7f84fb fix(refinery): add await-signal to patrol loop to prevent stall on idle MQ (gt-0hzeo)
- 279b5c9 fix(refinery): auto-sync crew workspaces after merge (#1147)
- 5ce42b1 fix(refinery): implement stale claim timeout to prevent stuck MRs
- 26541af fix(refinery): nudge refinery when MR is created, not at sling time (#1168)
- 13a0c7c fix(refinery): reopen source issue on rejection
- 583ecfa fix(refinery): serialize main pushes with merge slot
- d7a6d52 fix(rig): bootstrap Dolt, fix tracked beads, enhance rig list (#1433)
- cbd9ad3 fix(rig): check parked/docked status before starting agents
- 83ddef4 fix(rig): dock/undock require main branch to prevent silent failures
- 621bbd3 fix(rig): gt rig dock now stops polecat sessions
- fc6aea5 fix(rig): map rig/polecats assignees to tmux sessions
- 77514a3 fix(rig): normalize trailing dash in beads prefix at intake (#1136)
- 2fb787c fix(rig): remove route from routes.jsonl on rig remove (#910)
- 4b3afc7 fix(rig): scaffold .claude/ in polecats/ during gt rig add (gt-ke4mj)
- 2de9fe3 fix(rig): validate git URL in
gt rig addto reject local paths (#1138) - b90a338 fix(role): remove incorrect /rig suffix from crew/polecat paths
- a5554b8 fix(session): remove redundant gt prime instruction from start/restart beacons
- 1468b03 fix(session): use hq- prefix for town-level dog and boot sessions
- 6c86616 fix(settings): set editorMode to normal for Claude sessions (#929)
- cf544aa fix(shell): use detected shell RC path in activation message
- 8013ec0 fix(skill): /handoff now always collects state
- b74fef1 fix(sling): add cross-rig guard to prevent slinging beads to wrong rig (gt-myecw)
- f19b410 fix(sling): add rollback on partial failure to prevent zombie artifacts (gt-jn40ft)
- 1f293e5 fix(sling): defer polecat session start to prevent race condition
- 05148e9 fix(sling): pass GT_ROOT to bd cook for formula path resolution
- 8167085 fix(sling): retry hook with verification on Dolt concurrency errors (#1012)
- b7e8c1e fix(sling): rollback spawned polecat when wisp creation fails (#1390)
- e4a40fa fix(sling): route standalone formula wisps to target rig beads (#1155)
- 5abaeba fix(sling): skip nudge when self-slinging
- c897b6f fix(sling): trim trailing slashes from target arguments
- 67e148e fix(sling): trim trailing slashes from target arguments (#1068)
- 90a6787 fix(sling): wait for young sessions in ensureAgentReady (hq-t7gm)
- e7514bc fix(spawn): clear NODE_OPTIONS to prevent polecat debugger crashes (#1375)
- 889c586 fix(stale): enable stale binary warning and fix source detection
- b229fde fix(startup): add minimum readiness delay for zero-delay presets
- ce49e68 fix(startup): handle unknown agent presets with minimal fallback config
- 232e3d9 fix(startup): normalize empty agentName to claude for default sessions
- 31bd120 fix(startup): unify agent startup with beacon + instructions in CLI prompt (#977)
- abc93a0 fix(style): replace incomplete stripAnsi with regex, remove dead code (gt-qecxc, gt-eedlh)
- f886dab fix(templates): add directory discipline, fix gt mail hook command
- fd25b51 fix(templates): directory discipline, bd create clarification, command fixes (#953)
- 319e0f7 fix(test): add --adopt flag to integration tests using local paths
- 5c21e11 fix(test): add opencode stub binary for agent config tests
- 96a2423 fix(test): fix sling test command pattern matching
- 41045f2 fix(test): handle bd warnings in JSON output parsing (gt-ow2gb)
- 8bb8e48 fix(test): log commands in Windows fake bd for TestInitBeadsSetsIssuePrefix
- ca3276a fix(test): migrate integration tests from SQLite to Dolt backend (#1304)
- f768c55 fix(test): resolve macOS /var symlinks in integration tests (gt-ow2gb)
- fdbf04e fix(test): set BuiltProperly ldflags in test helper
- bc65fa4 fix(test): skip Windows retry test due to 8.3 short path issue (gt-ow2gb)
- e751e68 fix(test): update tests to expect compound GT_ROLE format
- 57f062a fix(tmux): add -- to kill commands to prevent procps-ng argument parsing bug (#928)
- e0a4e5a fix(tmux): add defer cleanup to kill tests to prevent session leaks
- 2cb7dd6 fix(tmux): detect Claude when pane command is version string
- fccac5e fix(tmux): eliminate TOCTOU race in EnsureSessionFresh (gt-1nfip)
- b5ba951 fix(tmux): handle deleted working directory on respawn
- be96bb0 fix(tmux): kill process group to prevent orphaned processes
- 3519f58 fix(tmux): require explicit opt-in for cleanup session tests
- bd9e233 fix(tmux): target pane 0 explicitly in health checks to prevent false zombie detection
- 70faa3f fix(tmux): tolerate 'server exited unexpectedly' error (#1440)
- 0605db9 fix(tmux): use syscall.Kill() for process group termination
- cc326d4 fix(tmux): use unix timestamp for session creation time parsing
- fe09e59 fix(tmux): wake Claude in detached sessions by triggering SIGWINCH (#976)
- aae35e2 fix(tui): add timeout to CombinedSource fan-in goroutines to prevent leaks (#689)
- 67cce7e fix(unsling): clean up stale hooked beads when agent hook_bead is null
- cf72219 fix(unsling): update bead status to open after clearing hook
- f372837 fix(version): change stale binary advice from 'gt install' to 'make install'
- 4eab8ba fix(version): improve bd version check resilience during multi-agent startup (#984)
- cdcde82 fix(version): use --no-daemon to avoid bd version check contention
- 717478d fix(web): buffer template output to prevent superfluous WriteHeader
- 1122267 fix(web): remove os.Executable() to prevent fork bomb in tests
- e0a0368 fix(witness): add await-signal backoff to prevent tight loop when idle
- 69cfab8 fix(witness): add grace period before auto-nuking idle polecats (#1182)
- eb017c7 fix(witness): fire CheckConvoysForIssue from zombie detection paths (gt-nsteq7)
- 72c0528 fix(witness): fix ParseSwarmStart docstring, double TrimPrefix, and missing BeadIDs parsing
- c971808 fix(witness): prevent crash loop when rig is idle
- 97a7bb0 fix: Add missing deacon/dogs/ pattern to .gitignore template
- 95ae2dd fix: Allow .mcp.json in worktree sparse checkout
- f868250 fix: Allow .mcp.json in worktree sparse checkout (#1067)
- e65e911 fix: Change 'Gastown' to 'Gas Town' in all ASCII art and titles
- 75b7e3b fix: MarshalSettings no longer mutates input and can clear editorMode
- 2c3d6ba fix: PATCH-003 push verification + PATCH-004 tmux UTF-8
- 8925ac6 fix: Phase A lifecycle fixes (G11, G15 retry, G20, A4)
- 0d86358 fix: Prevent startup race condition and isolate polecat settings
- f43de72 fix: Prevent startup race condition and isolate polecat settings (#1077)
- 014480e fix: Skip Windows-incompatible tests when binaries unavailable
- 4c6ba82 fix: TestEnsureRunning_UnhealthyTriggersRestart race condition (gt-1wwbk)
- 8941e7b fix: Updated setup brew command to use correct formula (#903)
- 7e299ee fix: ValidateTemplateVariables now scans Prompts, Inputs, and Output fields
- 58022ba fix: abbreviate rig names to beads prefix in tmux status line
- 3da410f fix: accept all bead prefixes in gt cat and clean up on move failure (gt-2q24f)
- 13c1394 fix: add --force flag to hooks install for disabled hooks (gt-qzwds)
- e724ad0 fix: add --limit 0 to queue listing for correct FIFO ordering (gt-mo4xj)
- db21231 fix: add --no-boot flag to gt sling to avoid witness/refinery lock contention (gt-xu9g)
- 8493430 fix: add 10s timeout to GetActiveConnectionCount to prevent hanging (gt-20heet)
- 57ec9f5 fix: add 30s timeout to bd commands in plugin recording
- a643e95 fix: add 30s timeout to bd subprocess calls in polecat session_manager
- 4e5d269 fix: add 4-hour session age circuit breaker for refineries
- 2499d26 fix: add Ephemeral field to Issue struct and fix misclassified wisp check
- be4f332 fix: add GroupBeadIDWithPrefix for consistent ID helper signatures (gt-4p791p.11)
- e12aac8 fix: add TOCTOU re-verification before destructive cleanup actions (gt-23rl1)
- 08589e2 fix: add auto-respawn hook to mayor session for tmux detach survival
- 61ef681 fix: add bounds checks for string indexing panic points (issue #1228)
- 9e10fb3 fix: add concurrency protection to polecat Manager and dog Manager (gt-0wugq)
- 743b606 fix: add configurable timeout to migration step commands
- b4ad5ea fix: add context timeout to bd subprocess execution to prevent hangs (gt-ferja)
- 5425645 fix: add crew and polecats to reserved polecat names to prevent session name collisions
- 9f70511 fix: add cross-rig routing to ResetAgentBeadForReuse and CloseAndClearAgentBead (gt-2iqk5)
- 201b450 fix: add daemon running check to gt dolt migrate to prevent race conditions
- e82dc0c fix: add dedicated Dolt health check ticker (30s) separate from 3min heartbeat
- 725227c fix: add dependency cycle detection for expansion formulas
- 0cd135c fix: add error logging in done.go and file locking in curator.go (gt-i8yi8, gt-s6xvl)
- 75e8911 fix: add exponential backoff and max-restart cap to Dolt server restarts (gt-s2rdt7)
- 33439e9 fix: add extractIssueID unwrap to TUI convoy consumers and simplify test (gt-yp2pxc)
- dac9123 fix: add file locking to EnsureMetadata to prevent read-modify-write race
- f9cf612 fix: add flock locking, atomic archive, write error checks, and corruption detection to legacy JSONL mailbox (gt-uglmm)
- 55f5eb1 fix: add flock-based coordination to prevent TOCTOU race in lock.Acquire (gt-o6t54)
- 5d273ac fix: add gt dolt init to detect/repair workspace pointing at nonexistent database (gt-3k2h5)
- 66ae73d fix: add input validation for group names in CreateGroupBead (gt-4p791p.12)
- c86fce1 fix: add input validation for path traversal and argument injection (fixes #1229)
- 315a0bd fix: add input validation for web dashboard handlers (#1328)
- 6241834 fix: add missing [vars] declarations to 9 formula TOML files (gt-54tbh)
- 045c3fb fix: add missing [vars] declarations to 9 formula files (gt-tfr3en)
- 184af2b fix: add mutex protection to NotificationManager for thread safety (gt-vae5f)
- 703f83d fix: add per-bead file locking to prevent read-modify-write races (gt-joazs)
- c8918a7 fix: add post-claim verification to prevent TOCTOU double-processing (gt-l29bi)
- 602ee8a fix: add proactive zombie detection to witness patrol (gt-kj71zk)
- e928f97 fix: add proper error handling to mail commands that silently swallowed failures (gt-mhaiq)
- 38b6678 fix: add reactive convoy continuation feeding to observer (gt-mlfjm)
- 41a1e30 fix: add regex nil checks in callbacks, remove unsling globals
- 0d9997c fix: add reserved rig names, metadata tests, and recovery hint (#1346)
- f73a764 fix: add retry logic to SetAgentState and CreateOrReopenAgentBead (gt-94llt7)
- b6ce2a2 fix: add retry loop and error checking to run-hardener.sh nudge delivery (gt-cxvei)
- 4f5d426 fix: add retry with backoff for merge slot acquisition and fix Windows CI
- c086d0f fix: add session name validation to tmux creation and shell-interpolation methods (gt-zmxbj)
- af5100c fix: add timeout to NudgeSession/NudgePane per-session locks (gt-z4drj)
- 2360837 fix: add warning logging for silent routing fallbacks in ResolveRoutingTarget and LoadRoutes (gt-s66sh)
- 331ee74 fix: add warning logs for silently swallowed errors (fixes #1231) (#1281)
- 44d0342 fix: add working-dog guard and atomic per-rig refresh to dog Refresh (gt-94mvj)
- a66d960 fix: address CodeRabbit review feedback on PR #25
- cc9a17a fix: address code review findings for input validation PR #1283
- fa09fcc fix: address review feedback for stale claim timeout
- 66245f6 fix: address review findings for Mayor daemon supervision
- 4e7de88 fix: agent bead read-modify-write race, audit log path, and redirect safety (gt-fcqj7)
- 2c264b9 fix: agent registry cache invalidation and setup hook timeout
- d2bb84e fix: align CreateRigBead and CreateGroupBead signatures (gt-4p791p.9)
- c94a230 fix: align assigneeID format with hooked issue format (#946)
- 57f8b06 fix: align gt shutdown kill order with gt down (gt-cqytb)
- dc957bc fix: align molecule dep type filter with beads AffectsReadyWork semantics
- f38e5bf fix: allow polecat to delete its own worktree on gt done (#1023)
- 0ff092a fix: allow vars with formula-on-bead slings (#966)
- 072c464 fix: always send handoff mail (#973)
- 49cb8ed fix: always set jsonl_export to canonical value, detect stale values in doctor (gt-m781w)
- 7682173 fix: apply ZFC formula changes to canonical source
- 064b9d0 fix: apply d11560d ZFC changes to canonical formula source
- 657eed9 fix: atomic label removal in queue release to prevent orphaned claims (gt-qpkwh)
- 6862cc3 fix: atomic lock writes and checked Close() in file copy
- 2e41baa fix: auto-create dogs on pool dispatch when no idle dogs available (gt-jxoym)
- c34a42f fix: auto-force re-sling when hooked agent session is dead (gt-pqf9x)
- 29d4b7d fix: avoid close/reopen cycle for agent beads on Dolt backend (gt-14b8o)
- 896d77d fix: batch sling starts polecat sessions and cleans up on failure (gt-vd6lg)
- f90fd3b fix: boot starts Deacon directly when detected missing (gt-mlmys)
- 206aa10 fix: call extractSimpleRole in BuildStartupCommandWithAgentOverride
- 149e298 fix: capture ctx.Err() before cancel() to prevent timeout detection race (gt-olvcx)
- 0db30ee fix: change BuiltProperly check from error to warning
- 1de1fe7 fix: check DND/muted state before sending nudges in mail, broadcast, and channel paths (gt-3fk1m)
- 611f3b8 fix: check beads.db presence in verify_zero_artifacts and remove dead code (gt-bzu9f)
- 2684662 fix: check convoy tracked deps to prevent duplicate auto-convoy creation (gt-9qcum)
- fa48770 fix: check positional arg before flag validation in mail reply (gt-m7z0x)
- ee52218 fix: clean up orphaned tmux sessions at gt start time
- 35238c5 fix: clean up polecatDir on agent bead retry failure in RepairWorktreeWithOptions (gt-ye70dz)
- ce2dbbb fix: clean up stale SQLite references and tech debt in beads package (gt-76oep)
- 80d4258 fix: clear message ID on fan-out copies to prevent shared IDs across recipients
- 8a39052 fix: close TOCTOU race in Dolt server startup (gt-ppksl)
- 5b72e84 fix: close TOCTOU race in FindOrCreateRigBeadsDir
- 7702785 fix: collect errors on fan-out delivery instead of silently losing messages (gt-sog56)
- 25775fb fix: complete type-to-label migration for mail queries #1288
- dd8632a fix: complete type-to-label migration for mail queries (221ff02 missed read side)
- 8d493ea fix: consolidate Merge to use applyOverride/mergeEntries from merge.go
- dc8a2ce fix: copy RuntimeConfig in normalizeRuntimeConfig to avoid mutating input
- 223cb66 fix: correct 'ephemeral' framing — sessions are ephemeral, not polecats (gt-ww9bf)
- befd1e5 fix: correct bd list/create flag syntax in witness patrol formula (#493)
- 350c2f0 fix: create new worktree before removing old one in RepairWorktree
- 29bdb18 fix: crew shell inherits parent GT_ROLE instead of session-level env (#1292)
- 3f00c6f fix: cross-rig routing in Beads.Show() and dolt prefix detection on adopt
- d483a31 fix: deacon resolves idle polecats instead of escalating to mayor
- 62a5bbb fix: derive rig name from cwd in runDone instead of calling findCurrentRig
- 76499ce fix: detect and auto-recover from Dolt read-only state (gt-yfk8s)
- 8fa1ef2 fix: detect and auto-recover from Dolt read-only state in gt commands (gt-chx92)
- f7640a9 fix: detect polecat with closed bead still running in witness patrol (gt-h1l6i)
- d2d781b fix: detect running agents when argv[0] is version number
- 799efae fix: detect tmux-alive-but-agent-dead zombies in DetectZombiePolecats (gt-kj6r6)
- 98067e2 fix: detect zombie tmux sessions in gt polecat list
- f8ee412 fix: detectBeadsPrefixFromConfig misparses multi-hyphen issue IDs (gt-mawit)
- ac5e3b9 fix: dolt_remotes patrol correctly disabled when config is nil
- 77f8c57 fix: don't TrimSpace git status --porcelain lines in isBeadsOnlyChanges (gt-7j2zb)
- 7f80913 fix: eliminate FindRigBeadsDir TOCTOU race with atomic FindOrCreateRigBeadsDir (gt-k10wf)
- 5c2863e fix: eliminate deadlock in TestRestartWithBackoff_SkipsIfStartedDuringSleep (gt-m5ju2)
- 75c1898 fix: eliminate sling description read-modify-write race and add --no-daemon (gt-kphi9)
- b3cb8d8 fix: ensure dog lock directory exists before flock (gt-f2h87)
- 7241fc3 fix: ensure metadata.json has dolt server config in all worktrees (gt--srg)
- 8795f9a fix: eradicate Beads Classic sqlite references from gastown codebase
- daf2d27 fix: extract isCloseEvent method and rewrite test to call it (gt-7xh0y)
- da48891 fix: extract issueToMRInfo helper, replace joinFlags with strings.Join
- 23b35b5 fix: fail fast on config errors in Dolt retry loops (gt-2ra)
- f482a27 fix: filter dot-prefixed directories from crew scan in rig manager
- 8cc1431 fix: findCommonHooks intersection and RequiredUnless validation (gt-zt8df, gt-b8wh1)
- 2aa1e08 fix: five code-review bugs — nil deref, orphan processes, path safety, error loss, throttle
- 7abd14a fix: generate message ID at creation time in gt mail send (gt-rud3p)
- 920740a fix: generate message ID before Validate in sendToSingle (gt-8vw)
- 24b4756 fix: give rigRebootCmd its own flag variables instead of sharing with rigShutdownCmd
- f9f60c8 fix: gt dolt init-rig runs CREATE DATABASE on live server (gt-0pa6z)
- 61e0367 fix: gt rig add now updates daemon.json patrol config
- d414e6d fix: gt status checks agent liveness, not just tmux session existence
- 8abde53 fix: guard minAggregateCount against zero value from partial config
- 85dba4a fix: handle ErrSessionNotFound when cleaning stale sessions in gt crew at
- e8dfddc fix: handle dirty working tree in daemon syncWorkspace (gt-jtia8)
- 5655543 fix: handle gt-boot in ParseSessionName and add crew/polecats to reserved names
- fc78764 fix: handle legacy session format and fix test failures
- d610b06 fix: handle overseer address in notification routing (gt-afthf)
- 2598a87 fix: harden pane-0 targeting and extend to remaining callsites
- b63786a fix: improve error handling across polecat/dog/session cleanup paths (gt-v9bb0)
- bbc9c7d fix: improve error messages for gt orphans and gt peek from non-rig directories (gt-7ios)
- 0cb0d3e fix: increase Dolt retry to 10 attempts with exponential backoff + jitter (gt-nv8bk)
- 0ae4521 fix: increase MRID hash from 6 to 10 hex characters to avoid collisions (gt-0a9vy)
- ff56f5f fix: increase graceful shutdown grace period from 100ms to 3s with polling (gt-wyayy)
- 0fb3e8d fix: inherit environment in daemon subprocess calls (#876)
- 457c600 fix: integration branch bugs from test plan run 3
- 4f10c1f fix: kill process group on migration timeout to prevent orphaned children (gt-yqlb3)
- 88666ec fix: limit concurrent bd processes to prevent dolt lock contention (G1)
- 04727ef fix: log transient tmux errors in DetectZombiePolecats instead of silently skipping (gt-4len6)
- bb99f39 fix: log warning on convoy completion notification failure (gt-p3pdv)
- 13763e5 fix: log warning on invalid override files, return ReadDir errors (gt-dhp3u)
- 173538e fix: make ParseLabels idempotent - clear state before re-parsing (gt-nzrvk)
- 637581b fix: make beads version check non-blocking with 2s timeout (#1140)
- 0a6af56 fix: make catalog SaveToFile and routes WriteRoutes atomic
- 2079efb fix: make group CRUD methods consistently return (*Issue, error)
- c5e7365 fix: make gt shutdown always clean up orphaned Claude processes (gt-wd3ce)
- 9f57a35 fix: migrate doctor checks to label-based bead verification (gt-x9bdy)
- 221ff02 fix: migrate mail/daemon/TUI from type-based to label-based bead queries (gt-uxwyw)
- d2665ab fix: migrate settings to settings.local.json and remove redundant bootstrap files (#1082)
- 15be674 fix: molecule step ordering - treat unknown dep types as blocking + sort by sequence
- e3113ff fix: move process group kill to platform-specific files for Windows compat
- 1e4ea5e fix: multiple P1 bug fixes — race condition, mutex timeouts, dry-run flag, dot-dir filter, test fixes
- 3652096 fix: new rigs share HQ dolt_database for cross-db bead visibility (gt-42zaq)
- 462ea4f fix: normalize NBSP in prompt matching for Claude Code readiness detection (#1442)
- 2dde809 fix: nuke stale go-install binaries + embedded removal docs + refinery hardcode main
- aa36339 fix: only update lastHealthyTime on initial detection and after reset (gt-ju8wja)
- 7695b0c fix: parameterize target branch in refinery patrol formula
- c20fbce fix: parse bd show --json as array consistently (gt-4jahjt)
- c4889b7 fix: parseValue type inference falls back to string on unmarshal failure (gt-b9iky)
- 77db5b7 fix: pass --backend dolt --server to all bd init calls (gt-enott)
- 04e2b85 fix: pass r.Path instead of townRoot to NewWithBeadsDir in getBeadLabel (gt-brmfz)
- 9f30b80 fix: polecat nuke, shell-alias cwd, dolt PID staleness (#1408)
- de2fa6c fix: polecat with no work on hook now terminates instead of escalating (gt-jen3b)
- 96d2bc2 fix: populate GT_BRANCH/GT_POLECAT_PATH and arm cleanup on branch detection failure
- 4dfc59b fix: preserve --agent override across handoff via tmux session env
- de048ee fix: preserve RoleThemes and Custom when saving rig theme (gt-vri31)
- e6fd8d6 fix: preserve existing CLAUDE.md files during install and rig add
- 3c6d694 fix: prevent dog Refresh from leaving inconsistent state on partial failure
- 813811d fix: prevent duplicate auto-convoy creation on sling
- bf73271 fix: prevent duplicate patrol wisps by checking hooked status
- 03259ea fix: prevent feed curator OOM and unbounded file growth (fixes #1233)
- 7824dd1 fix: prevent polecat respawn from destroying unmerged MR work (#1008)
- 802353b fix: prevent polecat respawn from destroying unmerged MR work (ne-rn24b)
- 367fb67 fix: prevent refinery from re-implementing polecat work instead of merging
- b894d92 fix: prevent split-brain risk when bd used before dolt server starts (gt-ceq7b)
- 5aecbc0 fix: prevent zombie detection race, spawning invisibility, and escalation loops (gt-3ltnm)
- 72201b0 fix: prevent zombie polecat on RepairWorktree creation failure (gt-9zzuh)
- 82e4e7b fix: propagate errors from ShowMultiple and add missing flags to slot commands
- 83a0871 fix: reconcile polecat display state with tmux liveness in gt rig status (gt-1qyne)
- 4e290ce fix: reconcile polecat display state with tmux session liveness
- 314477a fix: refresh cross-rig issue status in convoy tracking (gt-b14z6)
- cccfc27 fix: remove --no-daemon from convoy/observer.go (missed by PR #1279)
- c08d099 fix: remove --no-daemon from sling paths lost during rebase
- 881dd7e fix: remove .beads/ from gitignore required patterns (regression from #966)
- e429812 fix: remove bd daemon references from gt down help text
- c6832e4 fix: remove bd sync references, Gas Town is Dolt-native
- 5aea5fa fix: remove broken dolt CLI flags from daemon health checks
- 70ca511 fix: remove conflicting required+default in mol-session-gc formula (#919)
- e1d1393 fix: remove deacon health monitoring from witness patrol
- 6940763 fix: remove dead GetUndefinedVariables, add backoff to dolt recovery (gt-oz5qe, gt-qgin3)
- b30cc9d fix: remove dead code in molecule and cmd/up (gt-7nogk, gt-6khuy)
- 941dad1 fix: remove dead mail functions from statusline, deduplicate crew session parsing
- 06a6186 fix: remove deprecated --no-daemon flag and BEADS_NO_DAEMON env var (#1301)
- 4cd8a77 fix: remove deprecated --no-daemon flag from all bd command invocations
- 003f162 fix: remove deprecated DeleteDogAgentBead that hard-deleted dog identity (gt-c89tv)
- 304f2c3 fix: remove hardcoded repo names from role templates (#1107)
- 7e28985 fix: remove push-to-main from polecat work formula quick-fix path
- 136f841 fix: remove sqlite3 doctor check from gastown
- d41b3c3 fix: remove unnecessary fmt.Sprintf in patrol_helpers.go
- a326f7a fix: remove unused themeApplyFlag variable in theme.go
- 91c9e14 fix: rename 'Active Polecats' to 'Polecats' in polecat list output (gt-b396c)
- cd3523e fix: rename misleading variable in TOCTOU guard (gt-23rl1)
- fc77e86 fix: replace WITNESS_PING mail with passive Deacon health check (gt-bwism)
- 979ebf3 fix: replace blind PGID kill with verified group member enumeration (gt-2dp2i)
- 04d0130 fix: replace exec.Command(test -d) with os.Stat in IsRigDocked
- 3a424c3 fix: replace flock with sync.Mutex for EnsureMetadata goroutine sync (gt-o9lsz)
- e32b16d fix: replace fragile string parsing with json.Unmarshal in findCleanupWisp (gt-kke3r0)
- 84f244d fix: replace hand-rolled TOML parser in formula.go with formula.ParseFile
- d11560d fix: replace hardcoded session cycling thresholds with agent judgment (ZFC)
- b88dce6 fix: require space or end-of-string after protocol message type prefix (gt-3kezl)
- cdd533f fix: resolve 2 Windows CI feed test failures
- 82ac242 fix: resolve 4 Windows CI test failures
- ad7deec fix: resolve CI lint and test failures on main (#1436)
- 7a3974d fix: resolve circular redirect warning in rig add
- 73e0565 fix: resolve polecat Dolt branch isolation gaps (sling + done)
- 17d02c0 fix: resolve pre-existing build errors (missing strconv import, extractSimpleRole rename)
- f5232ce fix: resolve rig-level beads in gt sling via rigs.json prefix fallback
- 1928335 fix: return (true, ErrNoHandler) for recognized-but-unhandled protocol messages (gt-ts0jp)
- d7ead92 fix: return ErrNotFound instead of nil,nil,nil in group bead lookups (gt-4p791p.3)
- 6885119 fix: return cleanup errors from HandleMerged instead of swallowing them (gt-twy74)
- 78fb4ef fix: return error from DefaultAccountsConfigDir on UserHomeDir failure (gt-7v3rx)
- 1c0e9ed fix: return error from KillStaleSession instead of silently swallowing it (gt-4s25eb)
- 841c306 fix: return error when role override TOML parse fails (gt-e4e4l)
- 9d8bbd9 fix: return errors from getTrackedIssues instead of nil (gt-uryn7)
- d044184 fix: return errors from json.Unmarshal in UnmarshalSettings instead of swallowing them
- fec5264 fix: return errors from protocol parse functions for invalid input (gt-zk07q)
- 7ac676b fix: route cross-rig agent bead operations to correct database (gt-mh3tb)
- fd4bd31 fix: route routine ops mail to witness/deacon instead of mayor (gt-dxkuwy)
- 2179611 fix: route slot operations through Beads wrapper for proper BEADS_DIR (gt-wrnwq)
- 7d74b79 fix: sanitize branch names in Dolt SQL operations to prevent injection (gt-5qxuk)
- baddb40 fix: scan for dolt databases instead of hardcoding 'beads' subdir (#1297)
- 8b72b48 fix: scope process cleanup to Gas Town processes instead of all node processes
- 13adf5b fix: security hardening for test command execution and error handling (#1245)
- ccd7757 fix: selfNukePolecat verifies remote push + RemoveWithOptions checks open MRs
- a7534d5 fix: separate empty cleanup_status from clean in DetectZombiePolecats
- 233c74c fix: session name parsing for hyphenated rigs; splitLines trailing empty; restart race (gt-f0rog)
- 6fac2d7 fix: set BD_DOLT_AUTO_COMMIT=off for polecat environments (gt-5cc2p)
- 5e455a3 fix: set BD_DOLT_AUTO_COMMIT=off for sling bd commands (gt-u6n6a)
- adcbbb1 fix: set issue_prefix in Dolt config during gt rig add (gt-aic) (#1337)
- 464c82f fix: set sync.mode in DB during dolt migrate/fix-metadata (gt-dookzl)
- 27c2ced fix: set type=agent when reopening agent beads in CreateOrReopenAgentBead (gt-dr02sy)
- 64fcda2 fix: six code-review bugs — misleading log, fragile parsing, ordering, cleanup
- 2f43360 fix: sling env var and flag mutations are now scoped locally
- 95e122b fix: sort keys in checkDependencyCycles for deterministic cycle detection (gt-e99a4)
- 5eb4f5b fix: stale --cleanup now performs full nuke sequence (gt-pnygi)
- d188fcb fix: stop overwriting qualified GT_ROLE and fix Windows touch cmd (gt-ow2gb)
- 4184029 fix: stop removing flock files to preserve concurrent lock protection (gt-vm7g2)
- 67e97f1 fix: surface os.Stat errors in ProvisionFormulas and add Error counter to HealthReport (gt-2dtpx)
- 052dc8e fix: surface partial work warnings in stale hook scanner output (gt-ajx6l)
- 55c51df fix: surface source errors in gt ready, remove dead stopCh (gt-y3bfi, gt-btpbz)
- 8642779 fix: sync dog persistent state in session Start/Stop, clean up orphaned sessions (gt-h0jiu)
- 51f6f3d fix: sync source formulas with patched embedded versions
- b05be88 fix: thread visited map through all resolution paths to prevent cycle bypass (gt-64wh5)
- fcfea69 fix: three P1 bugs — wrong db target, case-sensitive parse, slot leak
- 90bc27e fix: track per-command progress in migration steps for safe retry (gt-1e907)
- d9eb63a fix: unify dolt server PID file path to dolt.pid (gt-qi1oz)
- 103121b fix: unsling falls back to status query when agent bead missing or hook_bead empty (gt-dzbyd)
- ff4f1a2 fix: unsling uses ResolveHookDir for correct beads path in crew workspaces
- de78fd8 fix: unwrap external:prefix:id format in convoy getTrackedIssues() (gt-qg6s06)
- bf417af fix: update run-hardener.sh to use gt nudge for reliable prompt delivery
- 14435ca fix: update test assertions and set BEADS_DIR in EnsureCustomTypes (#853)
- f85355d fix: update web activity color tests to match 5/10min thresholds (gt-xa5sf)
- fe6007a fix: use *int for MaxReescalations to distinguish explicit 0 from unset (gt-p8dq0)
- 47d1214 fix: use AddressToIdentity normalization in isSelfMail (gt-epgmw)
- f00ce81 fix: use IsAgentAlive in mayor attach to check descendant processes #1315
- c015226 fix: use IsAgentAlive in mayor attach to check descendant processes (gt-7zl)
- abe14bb fix: use ParseSessionName for session parsing to support hyphenated rig names
- d27fd3e fix: use ResolveBeadsDir to detect rig layout instead of hardcoding
- 4fa2298 fix: use agent bead hook_bead as authoritative source for polecat issue in list (gt-ckk12)
- 0619d09 fix: use cross-filesystem safe move in MigrateRigFromBeads (gt-cpqxa)
- 3f08908 fix: use dolt auto-detect instead of broken CLI flags for server queries
- 4823dab fix: use flock for cross-process locking on events/feed JSONL writes (gt-p14p4)
- 6d18e0a fix: use gt handoff flags for mail (#957)
- 7689534 fix: use prefix-based routing in unsling and mol status for agent bead lookup
- 6b3a903 fix: use strings.TrimSpace for git branch output in rig_dock.go to prevent panic on empty output
- a8192fa fix: use t.Error instead of t.Log for test failure conditions
- 67a20d3 fix: use tmux session state to prevent false 'done' status for running polecats (gt-o01h4l)
- 1938c12 fix: use unique temp files in AtomicWriteFile to prevent concurrent corruption (gt-dcq7v)
- e3a4b02 fix: validate From, Subject, and ID in Message.Validate() (gt-bo4nv)
- 3e99a16 fix: validate dog name in Remove/Add to prevent kennel deletion and path traversal
- cc199c9 fix: validate newName in crew Rename() to reject invalid names (gt-gt3zv)
- 6e9d8bf fix: validate rig settings key path to prevent false success
- a2c5ee8 fix: verify bead worktree state before unhooking stale hooks (gt-ajx6l)
- fb8541b fix: warn when --reply-to thread lookup fails instead of silent fallthrough (gt-n3yh9)
- 95173ac fix: warn when workspace lookup fails during sling rollback bead unhook (gt-eikjsv)
- eb71f9b fix: wire cross-rig routing into Beads.Show() and add dolt prefix detection to rig adopt (#1308)
- 03f1a85 fix: zero struct before unmarshal in unsetNestedValue to properly remove keys (gt-1oub9)
Others
- 22bcf17 Add gt doctor check for stale JSONL-sync hooks with Dolt backend (#1293)
- 8b621ec Agent-agnostic zombie detection (gt-pf96) (#1026)
- 533caf8 Detect and clean stale POLECAT_DONE messages (#913)
- f147b6d Fix Kimi polecats not inheriting GT_RIG env var (ga-6s284)
- e885ace Fix SessionManager treating witness/refinery as polecats
- 377b487 Fix convoy check to query external rig databases for cross-rig tracking (#916)
- 3dc935a Fix crew --agent override not provisioning correct hooks/plugin
- d90bfa8 Fix doctor env-vars check false positive for gt-boot session
- 8a8603e Fix gt ready using wrong beads path for rigs (#963)
- 0096abd Fix race condition in agent startup by replacing sleep with polling
- b51b3f8 Fix witness LIFECYCLE:Shutdown to parse polecat name from message
- 24acc02 Fix witness LIFECYCLE:Shutdown to parse polecat name from message (#1075)
- c5e82ad Implement gt rig settings command with comprehensive tests (#1005)
- a8500ec Improve dashboard performance and UX
- 6026d99 Merge PR #1176: Fix: Add missing deacon/dogs/ pattern to .gitignore template
- 79db747 Merge PR #1199: docs: add PR branch naming guidance to CONTRIBUTING.md
- b0e731f Merge PR #1224: docs: Document formula invocation patterns
- 9d50aa7 Merge PR #1321: web: stop swallowing bd show failures in convoy fetcher
- 439189f Merge commit 'refs/mr/gt-32rbw' into HEAD
- c83cf53 Merge commit 'refs/mr/gt-4jz5x' into HEAD
- 0ee725a Merge commit 'refs/mr/gt-7xw1y' into HEAD
- 14882f8 Merge commit 'refs/mr/gt-9y0aj' into HEAD
- 0033206 Merge commit 'refs/mr/gt-bwt9j' into HEAD
- 9361746 Merge commit 'refs/mr/gt-dgkah' into HEAD
- ca61edb Merge commit 'refs/mr/gt-ghwg5' into HEAD
- 4dc8507 Merge commit 'refs/mr/gt-iastj' into HEAD
- 3279ba6 Merge commit 'refs/mr/gt-if4wl' into HEAD
- 1e13556 Merge commit 'refs/mr/gt-k0xft' into HEAD
- 3c3a02f Merge commit 'refs/mr/gt-quggy' into HEAD
- b953cf8 Merge commit 'refs/mr/gt-r52sl' into HEAD
- 1f03a99 Merge commit 'refs/mr/gt-rgk7b' into HEAD
- 0d35c68 Merge commit 'refs/mr/gt-t34oz' into HEAD
- 9d3f962 Merge commit 'refs/mr/gt-tyci8' into HEAD
- 758b51d Merge commit 'refs/mr/gt-ve0uh' into HEAD
- 93e3fcc Merge commit 'refs/mr/gt-w7ww5' into HEAD
- eda2567 Merge commit 'refs/mr/gt-wd3c6' into HEAD
- b664382 Merge commit 'refs/mr/gt-wfnte' into HEAD
- 5c89d2b Merge commit 'refs/mr/gt-x38i9' into HEAD
- e4024a2 Merge commit 'refs/mr/gt-z2yug' into HEAD
- 246cbf1 Merge polecat/dementus/gt-xoxt9 (resolve dolt.go conflict: keep both migrate dry-run and rollback flags)
- e2339a0 Merge remote-tracking branch 'origin/main' into HEAD
- 18890ad Merge remote-tracking branch 'origin/main' into HEAD
- 7cafcc1 Merge remote-tracking branch 'origin/main' into HEAD
- 1233e19 Merge remote-tracking branch 'origin/main' into HEAD
- 7bf6479 Merge remote-tracking branch 'origin/main' into HEAD
- d6d6fe7 Merge remote-tracking branch 'origin/main' into HEAD
- 81ae775 Merge remote-tracking branch 'origin/main' into HEAD
- 8082630 Merge remote-tracking branch 'origin/main' into HEAD
- d2e81b9 Optimize --fast mode from ~5s to ~2s (#1065)
- 0e26df4 Remove dead code in web, refinery, and types (fixes #1232)
- 5dd072f Revert "release: bump version to v0.6.0 with CHANGELOG"
- 5bb74b1 Revert erroneous addition of .beads to agent .gitignore template (#891)
- a88b859 Test/tests failing on windows (#1164)
- 44fbd6e Update .gitignore (#922)
- bd0f372 Update styles in README for better visibility
- 7268e5e [DOCS] Add some setup steps (#1148)
- 525fa50 add gosec G104 exclusion for internal/
- 42d0d6a chore(brew): add tmux as recommended dependency in Homebrew formula (#1313)
- c88d163 chore(ci): pin beads (bd) to v0.50.2 (#1443)
- b316239 chore(gastown): scorched-earth SQLite removal from codebase
- 1112c90 ci: auto-close needs-info/needs-repro issues after 14 days (#1401)
- 0f20278 ci: auto-label new issues and PRs with status/needs-triage (#1398)
- 7693977 ci: bump beads from pinned v0.47.1 to @latest
- 1a5f880 cleanup: remove G1 BdSemaphore and G11 --no-boot flag (gt-fzgct)
- 42f4e5f cleanup: remove G1 BdSemaphore and G11 --no-boot flag (gt-fzgct)
- 860ab8a cleanup: remove mail check cache test (gt-xutcm)
- b92082d cleanup: remove migration formula, simplify patrol formulas
- 1157fd3 cleanup: remove unnecessary dedup map from listFromDir
- b988865 createAutoConvoy: fail loudly when tracking dep fails
- 479f958 design(hooks): registry and management system analysis (gt-gow8b)
- 8878974 design: ledger export triggers for Level 1 -> Level 2/3 transitions (gt-ayk)
- 01059db docs(cli): add Long descriptions to 9 remaining commands
- 46f6609 docs(cli): add missing --help text for commands with sparse descriptions
- e651704 docs(dolt): distinguish Gas Town server-only from standalone Beads embedded default
- b49f08f docs(federation): add Dolt remotes configuration guide
- 9aff946 docs(mayor): add PR instruction to use origin remote (#1050)
- 1d260d3 docs(priming): remove bd sync references for Dolt backend
- 9238635 docs(templates): clarify bd create is not a gt command
- f2e9982 feat(claude-md): add command quick-reference to role CLAUDE.md templates (gt-5e6k)
- 56e19ca fix all CI failures: lint, integration tests, formula sync, and Windows compatibility
- d8408e3 fix all Windows CI test failures across 5 packages
- 4e24e9a fix missing strconv import in tmux.go
- ee605b5 fix nudge to target agent pane in multi-pane tmux sessions
- 4075362 fix prefix detection from issues.jsonl and clean up stale WAL files
- 107bc68 fix remaining 3 Windows CI test failures
- cdd7e0c fix(await-signal): handle empty stdout when querying agent bead (#1201)
- 1e90801 fix(git-init): update beads fingerprint after git initialization
- 52da3db fix(gt done): prevent incorrect main/master detection when cwd is unavailable
- 353b015 fix(patch-010): Re-enable remain-on-exit after respawn-pane
- a25437f fix(patch-010): Use per-session hooks only (global hooks unreliable)
- 7262593 fix(rig add): include dolt_mode and dolt_database in .beads/metadata.json
- 990f450 fix(rig add): include dolt_mode and dolt_database in .beads/metadata.json (gt-ex8p)
- 70cd7bb formula improvements that claude forgot to commit
- c7661cb perf(doctor): bypass bd daemon for town-root subprocess calls (#1043)
- daa7689 perf(mail): batch hook mail queries into single bd list call
- a3eca2a perf(status): optimize --fast mode from ~5s to ~2s
- 317b0df refactor(config): remove deprecated LoadRuntimeConfig function
- 30e65b5 refactor(convoy): replace SQLite queries with bd dep list commands
- dc3fd47 refactor(costs): decouple cost recording from Dolt database
- 2a04201 refactor(costs): rename wisp references to entries
- 6f71b5a refactor(env): set GT_ROLE in compound format for bd hooks
- eb233b2 refactor(session): unify session lifecycle into StartSession API (gt-0j3jo)
- a3cc214 refactor: break up god functions in prime.go and consolidate files
- ccbeea6 refactor: consolidate duplicate atomic write and slice utilities
- d15a3d8 refactor: consolidate findRigBeadsDir into single exported function
- 0d159ce refactor: extract resolveTarget and hookBeadWithRetry to eliminate sling dispatch duplication (gt-8gvrz)
- a850c40 refactor: extract shared cmd helpers from crew_helpers.go into helpers.go
- dfec070 refactor: migrate from claude.EnsureSettingsForRole to runtime.EnsureSettingsForRole (#1020)
- 97fab23 refactor: move Claude settings from customer repos to parent dirs via --settings (#1418)
- b178d05 refactor: remove bd daemon code from gastown
- 2db1f7d refactor: remove deprecated gt-prefix role bead ID functions (gt-4p791p.7)
- 4535838 refactor: rename GetGroupBead to GetGroupByName for consistent API naming (gt-4p791p.4)
- a8e0685 refactor: unify duplicate isSessionStale/isSessionProcessDead functions (gt-qgzj1h)
- 7755a45 refinery: detect stale claims and orphaned MR branches
- eb3d81c refinery: detect stale claims and orphaned MR branches (#1285)
- 5240a00 refinery: exclude closed merge requests from queue output (#1284)
- 2b09e0e release: bump version to v0.6.0 with CHANGELOG
- 09f9311 remove --no-daemon from docs and migration script
- af0ea37 remove BeadsNoDaemon env var (daemon mode no longer exists)
- 3f1e940 style: apply gofmt formatting to molecule_step files
- 016fe2d style: run gofmt on all files touched by PR
- cefbba6 sync embedded formulas after rebase
- 0e6c917 test(beads): add tests for catalog and handoff packages (gt-klm1q)
- c4748c0 test(beads): add tests for escalation, rig, and synthesis field parsing (gt-klm1q)
- d4126bb test(config): add hook configuration validation tests
- e8b04d4 test(config): update tests for LoadRuntimeConfig -> ResolveRoleAgentConfig migration
- ee04e2b test(dog): add tests for gt dog done command
- e6c83fe test(dolt): add tests for VerifyDatabases and extract testable helpers
- db6cddf test(e2e): add containerized install and daemon tests
- ffcd5fc test(escalate): add unit tests for escalation command logic (gt-o9l1h)
- b88ed95 trail: implement real hook activity from events log (#1282)
- 3a79af3 tweak mayor template
- c1ccb9a update architecture and dolt-storage docs to reflect current ground truth
- 4fc8c6d update beads fingerprint after git initialization (#1064)
- e24947e web: report bd show failures instead of swallowing errors
- d8ae4c2 web: report bd show failures instead of swallowing errors
- 91cc46e wip(convoy): add ConvoyConfig with NotifyOnComplete to TownSettings