From 09bbb0f430804d21bab53bb60f8f56860010415f Mon Sep 17 00:00:00 2001 From: julianknutsen Date: Tue, 6 Jan 2026 02:16:15 -0800 Subject: [PATCH] Fix lint issues and sparse checkout for empty repos MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Handle empty repos in ConfigureSparseCheckout (skip read-tree when no HEAD) - Fix errcheck: wrap fileLock.Unlock() error in defer - Fix unparam: remove unused *rig.Rig return from getWitnessManager - Fix unparam: mark unused agentType parameter with blank identifier 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- internal/cmd/witness.go | 17 ++++++++--------- internal/daemon/daemon.go | 2 +- internal/doctor/claude_settings_check.go | 3 ++- internal/git/git.go | 8 ++++++++ 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/internal/cmd/witness.go b/internal/cmd/witness.go index c431b4c0..84fdaef8 100644 --- a/internal/cmd/witness.go +++ b/internal/cmd/witness.go @@ -7,7 +7,6 @@ import ( "os/exec" "github.com/spf13/cobra" - "github.com/steveyegge/gastown/internal/rig" "github.com/steveyegge/gastown/internal/style" "github.com/steveyegge/gastown/internal/tmux" "github.com/steveyegge/gastown/internal/witness" @@ -117,20 +116,20 @@ func init() { } // getWitnessManager creates a witness manager for a rig. -func getWitnessManager(rigName string) (*witness.Manager, *rig.Rig, error) { +func getWitnessManager(rigName string) (*witness.Manager, error) { _, r, err := getRig(rigName) if err != nil { - return nil, nil, err + return nil, err } mgr := witness.NewManager(r) - return mgr, r, nil + return mgr, nil } func runWitnessStart(cmd *cobra.Command, args []string) error { rigName := args[0] - mgr, _, err := getWitnessManager(rigName) + mgr, err := getWitnessManager(rigName) if err != nil { return err } @@ -161,7 +160,7 @@ func runWitnessStart(cmd *cobra.Command, args []string) error { func runWitnessStop(cmd *cobra.Command, args []string) error { rigName := args[0] - mgr, _, err := getWitnessManager(rigName) + mgr, err := getWitnessManager(rigName) if err != nil { return err } @@ -195,7 +194,7 @@ func runWitnessStop(cmd *cobra.Command, args []string) error { func runWitnessStatus(cmd *cobra.Command, args []string) error { rigName := args[0] - mgr, _, err := getWitnessManager(rigName) + mgr, err := getWitnessManager(rigName) if err != nil { return err } @@ -282,7 +281,7 @@ func runWitnessAttach(cmd *cobra.Command, args []string) error { } // Verify rig exists and get manager - mgr, _, err := getWitnessManager(rigName) + mgr, err := getWitnessManager(rigName) if err != nil { return err } @@ -312,7 +311,7 @@ func runWitnessAttach(cmd *cobra.Command, args []string) error { func runWitnessRestart(cmd *cobra.Command, args []string) error { rigName := args[0] - mgr, _, err := getWitnessManager(rigName) + mgr, err := getWitnessManager(rigName) if err != nil { return err } diff --git a/internal/daemon/daemon.go b/internal/daemon/daemon.go index f5b872b7..9efdb3df 100644 --- a/internal/daemon/daemon.go +++ b/internal/daemon/daemon.go @@ -86,7 +86,7 @@ func (d *Daemon) Run() error { if !locked { return fmt.Errorf("daemon already running (lock held by another process)") } - defer fileLock.Unlock() + defer func() { _ = fileLock.Unlock() }() // Write PID file if err := os.WriteFile(d.config.PidFile, []byte(strconv.Itoa(os.Getpid())), 0644); err != nil { diff --git a/internal/doctor/claude_settings_check.go b/internal/doctor/claude_settings_check.go index 1613d117..6bcc6d9a 100644 --- a/internal/doctor/claude_settings_check.go +++ b/internal/doctor/claude_settings_check.go @@ -216,7 +216,8 @@ func (c *ClaudeSettingsCheck) findSettingsFiles(townRoot string) []staleSettings // checkSettings compares a settings file against the expected template. // Returns a list of what's missing. -func (c *ClaudeSettingsCheck) checkSettings(path, agentType string) []string { +// agentType is reserved for future role-specific validation. +func (c *ClaudeSettingsCheck) checkSettings(path, _ string) []string { var missing []string // Read the actual settings diff --git a/internal/git/git.go b/internal/git/git.go index 5501cf85..64bf98c2 100644 --- a/internal/git/git.go +++ b/internal/git/git.go @@ -644,6 +644,14 @@ func ConfigureSparseCheckout(repoPath string) error { return fmt.Errorf("writing sparse-checkout: %w", err) } + // Check if HEAD exists (repo has commits) before running read-tree + // Empty repos (no commits) don't need read-tree and it would fail + checkHead := exec.Command("git", "-C", repoPath, "rev-parse", "--verify", "HEAD") + if err := checkHead.Run(); err != nil { + // No commits yet, sparse checkout config is set up for future use + return nil + } + // Reapply to remove excluded files cmd = exec.Command("git", "-C", repoPath, "read-tree", "-mu", "HEAD") stderr.Reset()