Commit Graph

1239 Commits

Author SHA1 Message Date
Steve Yegge
c7664344d6 Show mail subject preview inline in status bar
Instead of just showing unread count, display truncated subject of first
unread message directly in the status bar. More useful than click-to-view
since terminal mouse support varies.

- Mayor: 20 char limit for subject preview
- Worker (crew/polecat): 25 char limit
- Falls back to count if subject unavailable

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
caeba65000 Add clickable mail preview in tmux status bar
- New `gt mail peek` command shows compact preview of first unread message
- Left-click on status-right (mail icon area) opens popup with mail preview
- Popup shows subject, sender, body preview (truncated to 500 chars)
- Shows count of additional unread messages if any
- Silent exit (code 1) when no unread mail

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
258c5de81a Fix witness session parsing in categorizeSession
Witness sessions use format gt-witness-<rig> but categorizeSession was
parsing them as gt-<rig>-<type>, incorrectly setting Rig="witness".
This caused the mayor status line to count "witness" as a third rig.

Added special case to handle gt-witness-<rig> format before the generic
rig-level parsing. Also updated tests to cover both actual and legacy formats.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
84d99a20bc fix(polecat): Remove git push instruction - use merge queue instead
Polecats should not push their branches to origin directly.
They submit work via `gt done` which goes through the merge queue.
The Refinery handles merging to main.

This was causing stale polecat branches to accumulate on origin.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
7ff25e579a Add cross-project dependency design and update molecules doc (gt-hbg5)
New design for tracking dependencies across project boundaries:
- Capability-based: reference provides:X labels, not issue IDs
- bd ship command for publishing capabilities
- external: prefix in blocked_by for cross-project refs
- Molecule parking for blocked work

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
d5018d84bf bd sync: 2025-12-21 22:40:56 2025-12-22 12:32:22 -08:00
Steve Yegge
5de72f516c bd sync: 2025-12-21 22:20:17 2025-12-22 12:32:22 -08:00
Steve Yegge
cd0f2a9ab7 bd sync: 2025-12-21 22:18:15 2025-12-22 12:32:22 -08:00
Steve Yegge
7c7a077d76 refactor(refinery): use io.Writer instead of fmt.Print for output
Add output field (io.Writer) to Manager and Engineer structs with
SetOutput() methods to enable testability and output redirection.

Replace all 30+ fmt.Printf/Println calls with fmt.Fprintf/Fprintln
using the configurable output writer, defaulting to os.Stdout.

This enables:
- Testing output without capturing stdout
- Redirecting output in different contexts
- Following cobra best practices

Closes: gt-cvfg

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
deb263ab01 bd sync: 2025-12-21 22:13:25 2025-12-22 12:32:22 -08:00
Steve Yegge
e75bdee50a refactor: add constants package for magic strings
Create internal/constants/constants.go with centralized definitions for:
- Directory names (mayor, polecats, crew, etc.)
- File names (rigs.json, town.json, state.json)
- Git branch names (main, beads-sync)
- Tmux session names (gt-mayor, gt-deacon)
- Agent role names

Add helper functions for common path construction:
- MayorRigsPath(), MayorTownPath(), MayorStatePath()
- RigMayorPath(), RigBeadsPath(), RigPolecatsPath()

Update key files to use the new constants:
- internal/cmd/rig_helpers.go
- internal/cmd/status.go
- internal/daemon/daemon.go

Closes: gt-xnql

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
666569181c bd sync: 2025-12-21 22:07:42 2025-12-22 12:32:22 -08:00
Steve Yegge
a7ef2b0080 bd sync: 2025-12-21 21:59:54 2025-12-22 12:32:22 -08:00
Steve Yegge
707fc17583 Simplify spawn.go to use bd mol run for molecules (gt-47tq)
Replace 95 lines of custom molecule instantiation with bd mol run:
- No more ephemeral beads layer
- No more manual molecule template handling
- bd mol run handles spawning, assignment, and pinning

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
4fbf3e11d0 bd sync: 2025-12-21 21:58:53 2025-12-22 12:32:22 -08:00
Steve Yegge
7b4817add5 bd sync: 2025-12-21 21:57:29 2025-12-22 12:32:22 -08:00
Steve Yegge
a2181a478a bd sync: 2025-12-21 21:55:53 2025-12-22 12:32:22 -08:00
Steve Yegge
2465af3e91 feat(witness): implement epic child filtering for auto-spawn
Add isChildOfEpic() function that checks if an issue is a child of
the configured epic by verifying the issue has the epic in its
dependents with dependency_type="blocks".

When EpicID is configured in witness config, only issues that block
that epic will be considered for auto-spawning. Issues that cannot
be verified are safely skipped.

Closes gt-zhm5.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
3e5852a563 chore(style): remove unused helper functions
Remove RenderSuccess, RenderWarning, RenderError, and RenderInfo
functions that were never used. The codebase uses style.SuccessPrefix
and style.Success.Render() directly instead.

Closes gt-nz6t.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:22 -08:00
Steve Yegge
3299d2b05e bd sync: 2025-12-21 21:50:57 2025-12-22 12:32:22 -08:00
Steve Yegge
950abb5546 bd sync: 2025-12-21 21:50:37 2025-12-22 12:32:21 -08:00
Steve Yegge
f605833bab bd sync: 2025-12-21 21:49:16 2025-12-22 12:32:21 -08:00
Steve Yegge
ee66c931b9 feat(beads): add cycle detection for molecule dependencies
Implement DFS-based cycle detection in ValidateMolecule to catch
circular dependencies in molecule step graphs. The algorithm uses
three-color marking (unvisited/visiting/visited) to detect back
edges that indicate cycles.

When a cycle is detected, the error message shows the cycle path
(e.g., "a -> b -> c -> a") for easy debugging.

Add 4 new tests:
- SimpleCycle: A -> B -> A
- LongerCycle: A -> B -> C -> A
- DiamondNoCycle: ensures valid diamond patterns pass
- CycleInSubgraph: cycle not involving root node

Closes gt-ai1z.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
bb7f197eef refactor(cmd): extract common manager creation boilerplate
Add getRig() helper in rig_helpers.go that encapsulates the common
boilerplate for finding town root, loading rigs config, and retrieving
a rig. This reduces duplication across 5 get*Manager functions:
- getPolecatManager
- getSessionManager
- getCrewManager
- getRefineryManager
- getWitnessManager

Closes gt-7sqi.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
5850f8e67b bd sync: 2025-12-21 21:45:59 2025-12-22 12:32:21 -08:00
Steve Yegge
8fb9f9a321 docs: clarify pinned molecule vs handoff mail distinction
Two mechanisms, different purposes:
- Pinned molecule (bd mol run) = What you are working on, tracked by beads
- Handoff mail = Optional context notes for session restarts

Updated templates, architecture.md, and builtin_molecules.go

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
4cdc746fd5 bd sync: 2025-12-21 21:37:51 2025-12-22 12:32:21 -08:00
Steve Yegge
1aede3b122 bd sync: 2025-12-21 21:35:34 2025-12-22 12:32:21 -08:00
Steve Yegge
d8d9b278dc bd sync: 2025-12-21 21:16:59 2025-12-22 12:32:21 -08:00
Steve Yegge
91b4b8b4cc fix(beads): Auto-create .beads/redirect for crew and polecats
Fixes gt-b6qm: redirect files can get deleted by git clean, causing
"no beads database found" errors.

Changes:
- crew.Manager.Add() now creates .beads/redirect during setup
- gt prime regenerates missing redirects silently on startup

The redirect points to the shared beads database at either:
- rig/mayor/rig/.beads/ (preferred)
- rig/.beads/ (fallback)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
5ae7a8415b bd sync: 2025-12-21 21:14:33 2025-12-22 12:32:21 -08:00
Steve Yegge
812ddc5a37 bd sync: 2025-12-21 21:03:32 2025-12-22 12:32:21 -08:00
Steve Yegge
43eb713d25 bd sync: 2025-12-21 18:49:09 2025-12-22 12:32:21 -08:00
Steve Yegge
99c75ca926 bd sync: 2025-12-21 18:48:48 2025-12-22 12:32:21 -08:00
Steve Yegge
1705c14b75 bd sync: 2025-12-21 18:28:51 2025-12-22 12:32:21 -08:00
Steve Yegge
97bfe66acb feat(statusline): Add deacon status line with owl icon
Shows: 🦉 N rigs | 📬 N (unread mail)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
f41fe53955 bd sync: 2025-12-21 18:05:18 2025-12-22 12:32:21 -08:00
Steve Yegge
f29d4e56ce bd sync: 2025-12-21 18:04:59 2025-12-22 12:32:21 -08:00
Steve Yegge
45e197fe0e bd sync: 2025-12-21 18:04:27 2025-12-22 12:32:21 -08:00
Steve Yegge
8316fc346b bd sync: 2025-12-21 17:53:43 2025-12-22 12:32:21 -08:00
Steve Yegge
4809037316 docs: Add deacon plugin system design
- New docs/deacon-plugins.md with full plugin architecture
- Directory-based discovery at ~/gt/plugins/
- Gate types: cooldown, cron, condition, event
- Parallel execution support via Task tool subagents
- Updated mol-deacon-patrol plugin-run step to reference new docs

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:32:21 -08:00
Steve Yegge
ac60318778 bd sync: 2025-12-21 17:30:06 2025-12-22 12:32:21 -08:00
Steve Yegge
42fb28542a bd sync: 2025-12-21 17:26:39 2025-12-22 12:32:21 -08:00
Steve Yegge
8990c79aee bd sync: 2025-12-21 17:26:20 2025-12-22 12:32:21 -08:00
Steve Yegge
794a9ee8a8 feat: Add gt peek command and session communication docs
Adds gt peek as ergonomic alias for gt session capture:
  gt peek gastown/furiosa      # Last 100 lines
  gt peek gastown/furiosa 50   # Last 50 lines

Creates nudge/peek pair as canonical session interface:
  gt nudge - send TO session (reliable delivery)
  gt peek  - read FROM session (capture-pane wrapper)

Adds docs/session-communication.md explaining:
- Why raw tmux send-keys is unreliable for Claude
- The reliable NudgeSession pattern (literal + delay + Enter)
- Command reference and common patterns
- Guidance for template authors

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:31:38 -08:00
Steve Yegge
514bcb7e96 feat: Update gt nudge to accept rig/polecat format
Now accepts ergonomic rig/polecat addresses:
  gt nudge gastown/furiosa "Check your mail"

Still supports raw session names for legacy use.
Reuses parseAddress and getSessionManager from session.go.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:28:14 -08:00
Steve Yegge
8699b7b3fd fix: Clean polecat .beads/ on spawn to prevent contamination (gt-z3qf)
When polecat branches have .beads/ tracked from previous bd sync operations,
those files would contaminate the new worktree. Now setupSharedBeads():

1. Removes any existing .beads/ contents before creating redirect
2. Points redirect directly to mayor/rig/.beads (matches crew workers)

Also adds sling-design.md documenting the gt sling command design.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:22:08 -08:00
Steve Yegge
c9ac8d66c6 bd sync: 2025-12-22 12:20:43 2025-12-22 12:20:43 -08:00
Steve Yegge
ff738051c8 bd sync: 2025-12-22 12:20:24 2025-12-22 12:20:24 -08:00
Steve Yegge
b9cee8f838 bd sync: 2025-12-22 12:19:36 2025-12-22 12:19:36 -08:00