feat(beads): add mol-install-go-binary molecule (gt-g44u.2)

Add a single-step molecule for building and installing the gt binary.

The molecule contains one step:
- install: Build with `go build -o gt ./cmd/gt` and install with
  `go install ./cmd/gt`

Added InstallGoBinaryMolecule() function and test.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Steve Yegge
2025-12-19 16:02:51 -08:00
parent 959912b6d4
commit 0c90aa5936
3 changed files with 257 additions and 175 deletions

View File

@@ -14,6 +14,7 @@ func BuiltinMolecules() []BuiltinMolecule {
EngineerInBoxMolecule(),
QuickFixMolecule(),
ResearchMolecule(),
InstallGoBinaryMolecule(),
}
}
@@ -97,6 +98,31 @@ Needs: investigate`,
}
}
// InstallGoBinaryMolecule returns the install-go-binary molecule definition.
// This is a single step to rebuild and install the gt binary after code changes.
func InstallGoBinaryMolecule() BuiltinMolecule {
return BuiltinMolecule{
ID: "mol-install-go-binary",
Title: "Install Go Binary",
Description: `Single step to rebuild and install the gt binary after code changes.
## Step: install
Build and install the gt binary locally.
Run from the rig directory:
` + "```" + `
go build -o gt ./cmd/gt
go install ./cmd/gt
` + "```" + `
Verify the installed binary is updated:
` + "```" + `
which gt
gt --version # if version command exists
` + "```",
}
}
// SeedBuiltinMolecules creates all built-in molecules in the beads database.
// It skips molecules that already exist (by title match).
// Returns the number of molecules created.

View File

@@ -5,8 +5,8 @@ import "testing"
func TestBuiltinMolecules(t *testing.T) {
molecules := BuiltinMolecules()
if len(molecules) != 3 {
t.Errorf("expected 3 built-in molecules, got %d", len(molecules))
if len(molecules) != 4 {
t.Errorf("expected 4 built-in molecules, got %d", len(molecules))
}
// Verify each molecule can be parsed and validated
@@ -141,3 +141,34 @@ func TestResearchMolecule(t *testing.T) {
t.Errorf("document should need investigate, got %v", steps[1].Needs)
}
}
func TestInstallGoBinaryMolecule(t *testing.T) {
mol := InstallGoBinaryMolecule()
if mol.ID != "mol-install-go-binary" {
t.Errorf("expected ID 'mol-install-go-binary', got %q", mol.ID)
}
if mol.Title != "Install Go Binary" {
t.Errorf("expected Title 'Install Go Binary', got %q", mol.Title)
}
steps, err := ParseMoleculeSteps(mol.Description)
if err != nil {
t.Fatalf("failed to parse: %v", err)
}
// Should have 1 step: install
if len(steps) != 1 {
t.Errorf("expected 1 step, got %d", len(steps))
}
if steps[0].Ref != "install" {
t.Errorf("expected ref 'install', got %q", steps[0].Ref)
}
// install has no deps
if len(steps[0].Needs) != 0 {
t.Errorf("install should have no deps, got %v", steps[0].Needs)
}
}