Skip to content

Staticcheck Pre-Commit Integration - Manual Testing Checklist #483

@github-actions

Description

@github-actions

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


Auto-created from staticcheck_manual_testing.md

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    Status

    Backlog

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions