Commit Graph

509 Commits

Author SHA1 Message Date
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
00003f5b0b docs: Add propulsion principle documentation (gt-7hor)
Write canonical documentation for the Universal Gas Town Propulsion
Principle covering:
- The One Rule (hook has work → work happens)
- Why it works (stateless agents, molecule-driven, beads as control plane)
- The sling lifecycle diagram (spawn → attach → execute → burn)
- Agent startup protocol (gt prime → check attachment → execute or wait)
- Propulsion patterns and anti-patterns
- Nondeterministic idempotence

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-22 12:18:43 -08:00
Steve Yegge
d471c1c080 bd sync: 2025-12-21 17:25:40 2025-12-21 17:25:40 -08:00
Steve Yegge
eea437c69e bd sync: 2025-12-21 17:25:15 2025-12-21 17:25:15 -08:00
Steve Yegge
6a77bfeed7 bd sync: 2025-12-21 17:25:07 2025-12-21 17:25:07 -08:00
Steve Yegge
095f71109b bd sync: 2025-12-21 17:23:59 2025-12-21 17:23:59 -08:00
Steve Yegge
fa7ae262ab bd sync: beads state 2025-12-21 17:23:51 -08:00
Steve Yegge
849ba242a9 fix(mq): push branch to origin before creating MR
CRITICAL FIX: Both `gt done` and `gt mq submit` were creating MR
records without pushing the branch to origin first. When polecat
worktrees were deleted, the unpushed branches were lost forever.

This caused 12 MQ items to become orphaned - merge requests existed
but their branches had vanished.

The fix adds a mandatory `git push origin <branch>` before creating
the MR record. If push fails, the MR is not created.

Fixes: gt-aqku

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-21 17:23:22 -08:00
Steve Yegge
7badab8a71 bd sync: rig beads state 2025-12-21 17:23:20 -08:00