--- phase: quick-13 plan: 13 subsystem: backend tags: [lint, cleanup, mechanical] dependency_graph: requires: [] provides: [clean-lint-output] affects: [] tech_stack: added: [] patterns: [golines-line-length, wsl-whitespace, errcheck-ignored-returns, intrange-loops] key_files: created: [] modified: - backend/database/testhelper.go - backend/events/cmd/genevents/main.go - backend/library/library.go - backend/database/search_test.go - backend/config/config_test.go - backend/queue/navigation_test.go - backend/queue/queue_test.go - backend/library/scan_test.go - backend/favorites/config_test.go - backend/theme/config_test.go - backend/player/volume_test.go - backend/queue/persistence_test.go decisions: [] metrics: duration: ~32m completed: "2026-03-05" --- # Quick Task 13: Fix Linting Issues Summary **One-liner:** Zero golangci-lint issues via mechanical fixes across 12 Go files (errcheck, golines, gofumpt, wsl, nlreturn, intrange, unused) ## What Was Done Fixed all 31+ golangci-lint issues across 12 files with zero behavioral changes: ### Issue Categories Fixed | Category | Count | Fix | |----------|-------|-----| | errcheck | 4 | Assign error returns to `_` (db.Close, tmp.Close, os.Remove) | | golines | 10+ | Break long lines (t.Errorf, SQL strings, struct literals) | | gofumpt | 1 | Reformat ScanProgress struct literal (orphans phase) | | wsl | 17 | Add blank lines before declarations, ranges, if-statements; remove trailing comments before `}` | | nlreturn | 3 | Add blank line before return statements | | intrange | 2 | Convert `for i := 0; i < n; i++` to `for i := range n` | | unused | 2 | Remove unused `artistEntry` and `albumEntry` type definitions | ### Files Modified **Main source files (3):** - `backend/database/testhelper.go` — errcheck fix for `db.Close()` - `backend/events/cmd/genevents/main.go` — errcheck, nlreturn, wsl, gofumpt fixes - `backend/library/library.go` — gofumpt struct formatting, wsl spacing **Test files (9):** - `backend/database/search_test.go` — golines, unused types, wsl fixes - `backend/config/config_test.go` — golines, wsl trailing comment fix - `backend/queue/navigation_test.go` — intrange, golines, wsl fixes - `backend/queue/queue_test.go` — intrange, nlreturn, golines fixes - `backend/queue/persistence_test.go` — golines fixes - `backend/library/scan_test.go` — golines, wsl fixes - `backend/favorites/config_test.go` — wsl fix - `backend/theme/config_test.go` — wsl fixes - `backend/player/volume_test.go` — golines fixes ## Commits | Hash | Message | |------|---------| | e1a95e6 | fix(quick-13): resolve lint issues in main source files | **Note:** All 12 files committed atomically because the pre-commit hook runs `golangci-lint run ./...` globally — partial commits would fail while unfixed files remain in the working tree. ## Deviations from Plan ### Auto-fixed Issues **1. [Rule 3 - Blocking] Additional files needed for global lint pass** - **Found during:** Task 1 commit - **Issue:** The pre-commit hook runs `golangci-lint run ./...` across the entire codebase. The plan listed 8 files, but 4 additional test files (`favorites/config_test.go`, `theme/config_test.go`, `player/volume_test.go`, `queue/persistence_test.go`) also had golines/wsl issues that blocked any commit. - **Fix:** Fixed all issues in the additional files alongside the planned files. - **Files modified:** `backend/favorites/config_test.go`, `backend/theme/config_test.go`, `backend/player/volume_test.go`, `backend/queue/persistence_test.go` **2. [Rule 3 - Blocking] Codegen-check hook failure from pre-existing unstaged changes** - **Found during:** Task 1 commit - **Issue:** The `codegen-check` pre-commit hook runs `git diff --name-only` and fails if ANY uncommitted changes exist. Pre-existing frontend TypeScript changes (from previous sessions) caused this check to fail. - **Fix:** Temporarily stashed the pre-existing frontend changes, committed the lint fixes, then restored the stash. No files were modified or lost. **3. [Rule 3 - Blocking] Single commit for both tasks** - **Found during:** Task 1 commit - **Issue:** The global `golangci-lint run ./...` check in the pre-commit hook means ALL Go files must be lint-clean for ANY commit. Cannot commit source files separately from test files. - **Fix:** Combined both tasks into a single atomic commit. ## Verification - `golangci-lint run ./...` → **0 issues** - `go test ./backend/...` → **all packages pass** - No behavioral changes to any code ## Self-Check: PASSED All 12 modified files exist. Commit e1a95e6 verified in git log.