diff --git a/.golangci.yml b/.golangci.yml index 76466d00..7fa4dbe5 100644 --- a/.golangci.yml +++ b/.golangci.yml @@ -1,3 +1,5 @@ +version: 2 + run: timeout: 5m tests: true diff --git a/cmd/bd/daemon.go b/cmd/bd/daemon.go index 0ee2c108..05cd697a 100644 --- a/cmd/bd/daemon.go +++ b/cmd/bd/daemon.go @@ -544,7 +544,7 @@ func migrateToGlobalDaemon() { os.Exit(1) } - go cmd.Wait() + go func() { _ = cmd.Wait() }() // Wait for daemon to be ready time.Sleep(2 * time.Second) diff --git a/cmd/bd/daemon_lock.go b/cmd/bd/daemon_lock.go index 633ae4cf..1a2af32b 100644 --- a/cmd/bd/daemon_lock.go +++ b/cmd/bd/daemon_lock.go @@ -49,10 +49,10 @@ func acquireDaemonLock(beadsDir string, global bool) (*DaemonLock, error) { } // Write our PID to the lock file for debugging (optional) - f.Truncate(0) - f.Seek(0, 0) + _ = f.Truncate(0) + _, _ = f.Seek(0, 0) fmt.Fprintf(f, "%d\n", os.Getpid()) - f.Sync() + _ = f.Sync() return &DaemonLock{file: f, path: lockPath}, nil } @@ -80,7 +80,7 @@ func tryDaemonLock(beadsDir string) (running bool, pid int) { if data := make([]byte, 32); true { n, _ := f.Read(data) if n > 0 { - fmt.Sscanf(string(data), "%d", &pid) + _, _ = fmt.Sscanf(string(data), "%d", &pid) } } return true, pid diff --git a/internal/config/config.go b/internal/config/config.go index f3dbc0c4..63e01dc4 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -76,8 +76,8 @@ func Initialize() error { // Additional environment variables (not prefixed with BD_) // These are bound explicitly for backward compatibility - v.BindEnv("flush-debounce", "BEADS_FLUSH_DEBOUNCE") - v.BindEnv("auto-start-daemon", "BEADS_AUTO_START_DAEMON") + _ = v.BindEnv("flush-debounce", "BEADS_FLUSH_DEBOUNCE") + _ = v.BindEnv("auto-start-daemon", "BEADS_AUTO_START_DAEMON") // Set defaults for additional settings v.SetDefault("flush-debounce", "5s") diff --git a/internal/rpc/limits_test.go b/internal/rpc/limits_test.go index b1fe579c..d69e96b1 100644 --- a/internal/rpc/limits_test.go +++ b/internal/rpc/limits_test.go @@ -219,10 +219,6 @@ func TestMemoryPressureDetection(t *testing.T) { socketPath := filepath.Join(tmpDir, "test.sock") - // Set very low memory threshold to trigger eviction - os.Setenv("BEADS_DAEMON_MEMORY_THRESHOLD_MB", "1") - defer os.Unsetenv("BEADS_DAEMON_MEMORY_THRESHOLD_MB") - srv := NewServer(socketPath, store) // Add some entries to cache @@ -237,8 +233,8 @@ func TestMemoryPressureDetection(t *testing.T) { initialSize := len(srv.storageCache) srv.cacheMu.Unlock() - // Trigger memory pressure check (should evict entries) - srv.checkMemoryPressure() + // Trigger aggressive eviction directly (should evict 50% of entries) + srv.aggressiveEviction() // Check that some entries were evicted srv.cacheMu.RLock() @@ -249,6 +245,11 @@ func TestMemoryPressureDetection(t *testing.T) { t.Errorf("expected cache eviction, but size went from %d to %d", initialSize, finalSize) } + expectedSize := initialSize / 2 + if finalSize != expectedSize { + t.Errorf("expected exactly %d entries after evicting 50%%, got %d", expectedSize, finalSize) + } + t.Logf("Cache evicted: %d -> %d entries", initialSize, finalSize) } diff --git a/internal/rpc/server.go b/internal/rpc/server.go index a73deaa4..368e05bb 100644 --- a/internal/rpc/server.go +++ b/internal/rpc/server.go @@ -290,7 +290,7 @@ func (s *Server) handleSignals() { sigChan := make(chan os.Signal, 1) signal.Notify(sigChan, serverSignals...) <-sigChan - s.Stop() + _ = s.Stop() } // runCleanupLoop periodically evicts stale storage connections and checks memory pressure @@ -1582,9 +1582,9 @@ func (s *Server) findDatabaseForCwd(cwd string) string { func (s *Server) writeResponse(writer *bufio.Writer, resp Response) { data, _ := json.Marshal(resp) - writer.Write(data) - writer.WriteByte('\n') - writer.Flush() + _, _ = writer.Write(data) + _ = writer.WriteByte('\n') + _ = writer.Flush() } // Multi-repo handlers