-
-
Notifications
You must be signed in to change notification settings - Fork 0
Description
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
.gofile with an unused variable, attempt commit- Expected: Commit blocked, clear error message
- Actual: _____________________
- Issues: _____________________
-
Test: Create a
.gofile with unchecked error return, attempt commit- Expected: Commit blocked with errcheck error
- Actual: _____________________
- Issues: _____________________
-
Test: Create a
.gofile with shadowed variable, attempt commit- Expected: Commit blocked with govet/shadow error
- Actual: _____________________
- Issues: _____________________
1.2 Edge Case Files
-
Test: Commit a
_test.gofile 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
.gofile outside backend directory (edge case)- Expected: Hook runs correctly or gracefully handles
- Actual: _____________________
- Issues: _____________________
1.3 Multiple Files
-
Test: Stage multiple
.gofiles, some with issues, some clean- Expected: Commit blocked if any file has issues
- Actual: _____________________
- Issues: _____________________
-
Test: Stage mix of
.go,.js,.mdfiles 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: _____________________
- Example:
-
Test: SA4006 (value never used)
- Example:
x := 1; x = 2 - Expected: Blocked with clear message
- Actual: _____________________
- Example:
-
Test: SA1029 (string key for context.WithValue)
- Example:
ctx = context.WithValue(ctx, "key", "value") - Expected: Blocked with clear message
- Actual: _____________________
- Example:
2.2 Other Fast Linters
-
Test: Unchecked error (errcheck)
- Example:
file.Close()without error check - Expected: Blocked
- Actual: _____________________
- Example:
-
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: _____________________
- Example:
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-verifywithout-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/binfrom 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
.gofile 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-fastcommand- Expected: Runs and reports same issues as pre-commit
- Actual: _____________________
- Issues: _____________________
-
Test:
make lint-staticcheck-onlycommand- 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:ignorecomment 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.ymlor passes - Actual: _____________________
- Issues: _____________________
- Expected: Excluded via
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: _____________________
- Expected:
-
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
- Bug: [Description]
- Severity: [HIGH/MEDIUM/LOW]
- Impact: [Developer workflow/correctness/performance]
- Reproduction: [Steps]
Friction Points
- Issue: [Description]
- Impact: [How it affects developers]
- Suggested Fix: [Improvement idea]
Documentation Gaps
- Gap: [What's missing or unclear]
- Location: [Which file/section]
- Suggested Addition: [Content needed]
Performance Issues
- 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
Auto-created from staticcheck_manual_testing.md
Metadata
Metadata
Assignees
Labels
Projects
Status