chore: git cache cleanup
This commit is contained in:
438
docs/issues/created/20260111-staticcheck_manual_testing.md
Normal file
438
docs/issues/created/20260111-staticcheck_manual_testing.md
Normal file
@@ -0,0 +1,438 @@
|
||||
# Staticcheck Pre-Commit Integration - Manual Testing Checklist
|
||||
|
||||
**Purpose:** Find potential bugs and edge cases in the staticcheck blocking implementation
|
||||
**Date Created:** 2026-01-11
|
||||
**Target:** Pre-commit hook blocking behavior and developer workflow
|
||||
|
||||
---
|
||||
|
||||
## Testing Overview
|
||||
|
||||
This checklist focuses on **adversarial testing** - finding ways the implementation might fail or cause developer friction.
|
||||
|
||||
---
|
||||
|
||||
## 1. Commit Blocking Scenarios
|
||||
|
||||
### 1.1 Basic Blocking Behavior
|
||||
|
||||
- [ ] **Test:** Create a `.go` file with an unused variable, attempt commit
|
||||
- **Expected:** Commit blocked, clear error message
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Create a `.go` file with unchecked error return, attempt commit
|
||||
- **Expected:** Commit blocked with errcheck error
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Create a `.go` file with shadowed variable, attempt commit
|
||||
- **Expected:** Commit blocked with govet/shadow error
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 1.2 Edge Case Files
|
||||
|
||||
- [ ] **Test:** Commit a `_test.go` file with lint issues
|
||||
- **Expected:** Commit succeeds (test files excluded)
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Commit Go file in subdirectory (e.g., `backend/internal/api/`)
|
||||
- **Expected:** Commit blocked if issues present
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Commit Go file in nested package (e.g., `backend/internal/api/handlers/proxy/`)
|
||||
- **Expected:** Recursive linting works correctly
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Commit `.go` file outside backend directory (edge case)
|
||||
- **Expected:** Hook runs correctly or gracefully handles
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 1.3 Multiple Files
|
||||
|
||||
- [ ] **Test:** Stage multiple `.go` files, some with issues, some clean
|
||||
- **Expected:** Commit blocked if any file has issues
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Stage mix of `.go`, `.js`, `.md` files with only Go issues
|
||||
- **Expected:** Commit blocked due to Go issues
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 2. Lint Error Types
|
||||
|
||||
### 2.1 Staticcheck Errors
|
||||
|
||||
- [ ] **Test:** SA1019 (deprecated API usage)
|
||||
- **Example:** `filepath.HasPrefix()`
|
||||
- **Expected:** Blocked with clear message
|
||||
- **Actual:** _____________________
|
||||
|
||||
- [ ] **Test:** SA4006 (value never used)
|
||||
- **Example:** `x := 1; x = 2`
|
||||
- **Expected:** Blocked with clear message
|
||||
- **Actual:** _____________________
|
||||
|
||||
- [ ] **Test:** SA1029 (string key for context.WithValue)
|
||||
- **Example:** `ctx = context.WithValue(ctx, "key", "value")`
|
||||
- **Expected:** Blocked with clear message
|
||||
- **Actual:** _____________________
|
||||
|
||||
### 2.2 Other Fast Linters
|
||||
|
||||
- [ ] **Test:** Unchecked error (errcheck)
|
||||
- **Example:** `file.Close()` without error check
|
||||
- **Expected:** Blocked
|
||||
- **Actual:** _____________________
|
||||
|
||||
- [ ] **Test:** Ineffectual assignment (ineffassign)
|
||||
- **Example:** Assign value that's never read
|
||||
- **Expected:** Blocked
|
||||
- **Actual:** _____________________
|
||||
|
||||
- [ ] **Test:** Unused function/variable (unused)
|
||||
- **Example:** Private function never called
|
||||
- **Expected:** Blocked
|
||||
- **Actual:** _____________________
|
||||
|
||||
- [ ] **Test:** Shadow variable (govet)
|
||||
- **Example:** `:=` in inner scope shadowing outer variable
|
||||
- **Expected:** Blocked
|
||||
- **Actual:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 3. Emergency Bypass Scenarios
|
||||
|
||||
### 3.1 --no-verify Flag
|
||||
|
||||
- [ ] **Test:** `git commit --no-verify -m "Emergency hotfix"` with lint issues
|
||||
- **Expected:** Commit succeeds, bypasses hook
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** `git commit --no-verify` without `-m` (opens editor)
|
||||
- **Expected:** Commit succeeds after saving message
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 3.2 SKIP Environment Variable
|
||||
|
||||
- [ ] **Test:** `SKIP=golangci-lint-fast git commit -m "Test"` with issues
|
||||
- **Expected:** Commit succeeds, skips specific hook
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** `SKIP=all git commit -m "Test"` (skip all hooks)
|
||||
- **Expected:** All hooks skipped, commit succeeds
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 4. Performance Testing
|
||||
|
||||
### 4.1 Small Codebase
|
||||
|
||||
- [ ] **Test:** Commit single Go file (~100 lines)
|
||||
- **Expected:** < 5 seconds
|
||||
- **Actual:** _____ seconds
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 4.2 Large Commits
|
||||
|
||||
- [ ] **Test:** Commit 5+ Go files simultaneously
|
||||
- **Expected:** < 15 seconds (scales linearly)
|
||||
- **Actual:** _____ seconds
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Commit with changes to 20+ Go files
|
||||
- **Expected:** < 20 seconds (acceptable threshold)
|
||||
- **Actual:** _____ seconds
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 4.3 Edge Case Performance
|
||||
|
||||
- [ ] **Test:** Commit Go file while golangci-lint is already running
|
||||
- **Expected:** Graceful handling or reasonable wait
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 5. Error Handling & Messages
|
||||
|
||||
### 5.1 Missing golangci-lint
|
||||
|
||||
- [ ] **Test:** Temporarily rename golangci-lint binary, attempt commit
|
||||
- **Expected:** Clear error message with installation instructions
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Remove `$GOPATH/bin` from PATH, attempt commit
|
||||
- **Expected:** Clear error about missing tool
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 5.2 Configuration Issues
|
||||
|
||||
- [ ] **Test:** Corrupt `.golangci-fast.yml` (invalid YAML), attempt commit
|
||||
- **Expected:** Clear error about config file
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Delete `.golangci-fast.yml`, attempt commit
|
||||
- **Expected:** Falls back to default config or clear error
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 5.3 Syntax Errors
|
||||
|
||||
- [ ] **Test:** Commit `.go` file with syntax error (won't compile)
|
||||
- **Expected:** Blocked with compilation error
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 6. Developer Workflow Integration
|
||||
|
||||
### 6.1 First-Time Setup
|
||||
|
||||
- [ ] **Test:** Fresh clone, `pre-commit install`, attempt commit with issues
|
||||
- **Expected:** Hook runs correctly on first commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Developer without golangci-lint installed
|
||||
- **Expected:** Clear pre-flight error with install link
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 6.2 Manual Testing Tools
|
||||
|
||||
- [ ] **Test:** `make lint-fast` command
|
||||
- **Expected:** Runs and reports same issues as pre-commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** `make lint-staticcheck-only` command
|
||||
- **Expected:** Runs only staticcheck, reports subset of issues
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** VS Code task "Lint: Staticcheck (Fast)"
|
||||
- **Expected:** Runs in VS Code terminal, displays issues
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 6.3 Iterative Development
|
||||
|
||||
- [ ] **Test:** Fix lint issue, save, immediately commit again
|
||||
- **Expected:** Second commit faster due to caching
|
||||
- **Actual:** _____ seconds (first), _____ seconds (second)
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Partial fix (fix some issues, leave others), attempt commit
|
||||
- **Expected:** Still blocked with remaining issues
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 7. Multi-Developer Scenarios
|
||||
|
||||
### 7.1 Git Operations
|
||||
|
||||
- [ ] **Test:** Pull changes with new lint issues, attempt commit unrelated file
|
||||
- **Expected:** Pre-commit only checks staged files
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Rebase interactive with lint issues in commits
|
||||
- **Expected:** Each commit checked during rebase
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Cherry-pick commit with lint issues
|
||||
- **Expected:** Cherry-pick completes, hook runs on final commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 7.2 Branch Workflows
|
||||
|
||||
- [ ] **Test:** Switch branches, attempt commit with different lint issues
|
||||
- **Expected:** Hook checks current branch's code
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Merge branch with lint issues, resolve conflicts, commit
|
||||
- **Expected:** Hook runs on merge commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 8. False Positive Handling
|
||||
|
||||
### 8.1 Legitimate Patterns
|
||||
|
||||
- [ ] **Test:** Use `//lint:ignore` comment for legitimate pattern
|
||||
- **Expected:** Staticcheck respects ignore comment
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Code that staticcheck flags but is correct
|
||||
- **Expected:** Developer can use ignore directive
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 8.2 Generated Code
|
||||
|
||||
- [ ] **Test:** Commit generated Go code (e.g., protobuf)
|
||||
- **Expected:** Excluded via `.golangci-fast.yml` or passes
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 9. Integration with Other Tools
|
||||
|
||||
### 9.1 Other Pre-Commit Hooks
|
||||
|
||||
- [ ] **Test:** Ensure trailing-whitespace hook still works
|
||||
- **Expected:** Both hooks run, both can block independently
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Ensure end-of-file-fixer hook still works
|
||||
- **Expected:** Hooks run in order, all function
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 9.2 VS Code Integration
|
||||
|
||||
- [ ] **Test:** VS Code Problems tab updates after running lint
|
||||
- **Expected:** Problems tab shows same issues as pre-commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** VS Code auto-format on save with lint issues
|
||||
- **Expected:** Format succeeds, lint still blocks commit
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 10. Documentation Accuracy
|
||||
|
||||
### 10.1 README.md
|
||||
|
||||
- [ ] **Test:** Follow installation instructions exactly as written
|
||||
- **Expected:** golangci-lint installs correctly
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Verify troubleshooting section accuracy
|
||||
- **Expected:** Solutions work as documented
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
### 10.2 copilot-instructions.md
|
||||
|
||||
- [ ] **Test:** Follow "Troubleshooting Pre-Commit Staticcheck Failures" guide
|
||||
- **Expected:** Each troubleshooting step resolves stated issue
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 11. Regression Testing
|
||||
|
||||
### 11.1 Existing Functionality
|
||||
|
||||
- [ ] **Test:** Commit non-Go files (JS, MD, etc.)
|
||||
- **Expected:** No impact from Go linter hook
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Backend build still succeeds
|
||||
- **Expected:** `go build ./...` exits 0
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Backend tests still pass
|
||||
- **Expected:** All tests pass with coverage > 85%
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## 12. CI/CD Alignment
|
||||
|
||||
### 12.1 Local vs CI Consistency
|
||||
|
||||
- [ ] **Test:** Code that passes local pre-commit
|
||||
- **Expected:** Should pass CI golangci-lint (if continue-on-error removed)
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
- [ ] **Test:** Code that fails local pre-commit
|
||||
- **Expected:** CI may still pass (continue-on-error: true)
|
||||
- **Actual:** _____________________
|
||||
- **Issues:** _____________________
|
||||
|
||||
---
|
||||
|
||||
## Summary Template
|
||||
|
||||
### Bugs Found
|
||||
|
||||
1. **Bug:** [Description]
|
||||
- **Severity:** [HIGH/MEDIUM/LOW]
|
||||
- **Impact:** [Developer workflow/correctness/performance]
|
||||
- **Reproduction:** [Steps]
|
||||
|
||||
### Friction Points
|
||||
|
||||
1. **Issue:** [Description]
|
||||
- **Impact:** [How it affects developers]
|
||||
- **Suggested Fix:** [Improvement idea]
|
||||
|
||||
### Documentation Gaps
|
||||
|
||||
1. **Gap:** [What's missing or unclear]
|
||||
- **Location:** [Which file/section]
|
||||
- **Suggested Addition:** [Content needed]
|
||||
|
||||
### Performance Issues
|
||||
|
||||
1. **Issue:** [Description]
|
||||
- **Measured:** [Actual timing]
|
||||
- **Expected:** [Target timing]
|
||||
- **Threshold Exceeded:** [YES/NO]
|
||||
|
||||
---
|
||||
|
||||
## Testing Execution Log
|
||||
|
||||
**Tester:** _____________________
|
||||
**Date:** 2026-01-__
|
||||
**Environment:** [OS, Go version, golangci-lint version]
|
||||
**Duration:** _____ hours
|
||||
|
||||
**Overall Assessment:** [PASS/FAIL with blockers/FAIL with minor issues]
|
||||
|
||||
**Recommendation:** [Approve/Request changes/Block merge]
|
||||
|
||||
---
|
||||
|
||||
**End of Manual Testing Checklist**
|
||||
Reference in New Issue
Block a user