From 06450fe69ade2928deb9274bb67b7ba60d394b4f Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Thu, 6 Aug 2026 18:19:27 +0000 Subject: Remove the feature toggle system (dead code) Audited it (couldn't query the live DB directly -- auto-mode classifier blocks direct production reads without prior approval -- so this is a code-only audit): GetFeatureToggles/SetFeatureEnabled/IsFeatureEnabled/ CreateFeatureToggle/DeleteFeatureToggle had exactly one caller each, all inside their own CRUD handlers. Nothing anywhere else in the codebase read a toggle's Enabled state to gate any actual behavior -- confirmed by grepping every remaining .Enabled/IsFeatureEnabled reference back to either this dead code or its own tests. It was pure UI-managed CRUD with no consumer, unlike Trusted Agents (wired into agent.go/websocket.go) or Data Sources (wired into the sync pipeline) which stayed. Removes the Settings page section, the three /settings/features* routes and handlers, the five Store methods, the FeatureToggle model, and adds 028_drop_feature_toggles.sql (next free migration number, per this repo's convention of never renumbering -- see 021_drop_tasks.sql for the same drop-table-forward pattern) to drop the now-unused table. Also removed the now-dead tests for all of the above. go build ./... and go test ./... both clean. Co-Authored-By: Claude Sonnet 5 Claude-Session: https://claude.ai/code/session_01EZ7ikw2ukGJFTHE3bJS7zL --- internal/store/sqlite.go | 61 ---------------------------- internal/store/sqlite_test.go | 94 ------------------------------------------- 2 files changed, 155 deletions(-) (limited to 'internal/store') diff --git a/internal/store/sqlite.go b/internal/store/sqlite.go index d48cb09..2a062ff 100644 --- a/internal/store/sqlite.go +++ b/internal/store/sqlite.go @@ -628,67 +628,6 @@ func (s *Store) InvalidateAllCaches() error { return err } -// Feature toggles - -// GetFeatureToggles returns all feature toggles -func (s *Store) GetFeatureToggles() ([]models.FeatureToggle, error) { - rows, err := s.db.Query(` - SELECT id, name, description, enabled FROM feature_toggles ORDER BY name - `) - if err != nil { - return nil, err - } - defer func() { _ = rows.Close() }() - - var toggles []models.FeatureToggle - for rows.Next() { - var t models.FeatureToggle - var desc sql.NullString - if err := rows.Scan(&t.ID, &t.Name, &desc, &t.Enabled); err != nil { - return nil, err - } - if desc.Valid { - t.Description = desc.String - } - toggles = append(toggles, t) - } - return toggles, rows.Err() -} - -// IsFeatureEnabled checks if a feature toggle is enabled -func (s *Store) IsFeatureEnabled(name string) bool { - var enabled bool - err := s.db.QueryRow(`SELECT enabled FROM feature_toggles WHERE name = ?`, name).Scan(&enabled) - if err != nil { - return false - } - return enabled -} - -// SetFeatureEnabled updates a feature toggle's enabled state -func (s *Store) SetFeatureEnabled(name string, enabled bool) error { - _, err := s.db.Exec(` - UPDATE feature_toggles SET enabled = ?, updated_at = datetime('now', 'localtime') - WHERE name = ? - `, enabled, name) - return err -} - -// CreateFeatureToggle creates a new feature toggle -func (s *Store) CreateFeatureToggle(name, description string, enabled bool) error { - _, err := s.db.Exec(` - INSERT INTO feature_toggles (name, description, enabled) - VALUES (?, ?, ?) - `, name, description, enabled) - return err -} - -// DeleteFeatureToggle removes a feature toggle -func (s *Store) DeleteFeatureToggle(name string) error { - _, err := s.db.Exec(`DELETE FROM feature_toggles WHERE name = ?`, name) - return err -} - // SyncLogEntry represents a single entry in the sync activity log type SyncLogEntry struct { ID int64 diff --git a/internal/store/sqlite_test.go b/internal/store/sqlite_test.go index 7f7e56d..c64e6b3 100644 --- a/internal/store/sqlite_test.go +++ b/internal/store/sqlite_test.go @@ -641,100 +641,6 @@ func TestGetCardsByDateRange(t *testing.T) { // User Shopping Items Tests // ============================================================================= -// ============================================================================= -// Feature Toggles Tests -// ============================================================================= - -func setupTestStoreWithFeatureToggles(t *testing.T) *Store { - t.Helper() - - tempDir := t.TempDir() - dbPath := filepath.Join(tempDir, "test.db") - - db, err := sql.Open("sqlite3", dbPath) - if err != nil { - t.Fatalf("Failed to open test database: %v", err) - } - - db.SetMaxOpenConns(1) - store := &Store{db: db} - - schema := ` - CREATE TABLE IF NOT EXISTS feature_toggles ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - name TEXT UNIQUE NOT NULL, - description TEXT, - enabled BOOLEAN DEFAULT FALSE, - created_at DATETIME DEFAULT CURRENT_TIMESTAMP, - updated_at DATETIME DEFAULT CURRENT_TIMESTAMP - ); - ` - if _, err := db.Exec(schema); err != nil { - t.Fatalf("Failed to create schema: %v", err) - } - - return store -} - -func TestFeatureToggles_CRUD(t *testing.T) { - store := setupTestStoreWithFeatureToggles(t) - defer func() { _ = store.Close() }() - - // Create feature toggle - if err := store.CreateFeatureToggle("new_feature", "A new feature", false); err != nil { - t.Fatalf("Failed to create feature toggle: %v", err) - } - - // Get all toggles - toggles, err := store.GetFeatureToggles() - if err != nil { - t.Fatalf("Failed to get feature toggles: %v", err) - } - if len(toggles) != 1 { - t.Errorf("Expected 1 toggle, got %d", len(toggles)) - } - if toggles[0].Name != "new_feature" { - t.Errorf("Expected name 'new_feature', got '%s'", toggles[0].Name) - } - if toggles[0].Enabled { - t.Error("New feature should be disabled") - } - - // Check if enabled - if store.IsFeatureEnabled("new_feature") { - t.Error("IsFeatureEnabled should return false for disabled feature") - } - - // Enable feature - if err := store.SetFeatureEnabled("new_feature", true); err != nil { - t.Fatalf("Failed to enable feature: %v", err) - } - - if !store.IsFeatureEnabled("new_feature") { - t.Error("IsFeatureEnabled should return true after enabling") - } - - // Delete feature - if err := store.DeleteFeatureToggle("new_feature"); err != nil { - t.Fatalf("Failed to delete feature toggle: %v", err) - } - - toggles, _ = store.GetFeatureToggles() - if len(toggles) != 0 { - t.Errorf("Expected 0 toggles after delete, got %d", len(toggles)) - } -} - -func TestIsFeatureEnabled_NonExistent(t *testing.T) { - store := setupTestStoreWithFeatureToggles(t) - defer func() { _ = store.Close() }() - - // Non-existent feature should return false - if store.IsFeatureEnabled("does_not_exist") { - t.Error("Non-existent feature should return false") - } -} - // ============================================================================= // Completed Tasks Tests // ============================================================================= -- cgit v1.2.3