fix(install): Copy embedded formulas to new installations

When `gt install` creates a new HQ, formulas were not being provisioned
to `.beads/formulas/`. This embeds the formula library into the gt binary
and copies them during installation.

- Add go:generate directive to copy formulas from .beads/formulas/
- Add internal/formula/embed.go with ProvisionFormulas() function
- Call ProvisionFormulas() from runInstall() after beads init
- Add generate target to Makefile (build depends on it)
- Add TestInstallFormulasProvisioned integration test
- Log warning if formula stat fails with unexpected error

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
PV
2026-01-03 13:18:14 -08:00
parent 5186cd90be
commit 4c9bc36d61
5 changed files with 133 additions and 2 deletions

View File

@@ -12,6 +12,7 @@ import (
"github.com/spf13/cobra"
"github.com/steveyegge/gastown/internal/config"
"github.com/steveyegge/gastown/internal/deps"
"github.com/steveyegge/gastown/internal/formula"
"github.com/steveyegge/gastown/internal/session"
"github.com/steveyegge/gastown/internal/style"
"github.com/steveyegge/gastown/internal/templates"
@@ -195,6 +196,14 @@ func runInstall(cmd *cobra.Command, args []string) error {
fmt.Printf(" %s Could not initialize town beads: %v\n", style.Dim.Render("⚠"), err)
} else {
fmt.Printf(" ✓ Initialized .beads/ (town-level beads with hq- prefix)\n")
// Provision embedded formulas to .beads/formulas/
if count, err := formula.ProvisionFormulas(absPath); err != nil {
// Non-fatal: formulas are optional, just convenience
fmt.Printf(" %s Could not provision formulas: %v\n", style.Dim.Render("⚠"), err)
} else if count > 0 {
fmt.Printf(" ✓ Provisioned %d formulas\n", count)
}
}
// NOTE: Agent beads (gt-deacon, gt-mayor) are created by gt rig add,