--- name: go-pr-review description: Reviews pull requests in Go repositories with comprehensive checks including code quality, tests, linting, type checking, and Makefile validation --- # Go Pull Request Review This skill performs comprehensive reviews of pull requests in Go repositories, with special attention to projects using Makefiles for build automation. ## When to Use This Skill Use this skill when: - A developer requests a PR review for a Go repository - You need to validate changes before merging - You want to ensure code quality, test coverage, and build success - The repository uses a Makefile for build automation ## Review Process ### 0. Validate Repository Compatibility **IMPORTANT: Before proceeding, verify this is a compatible Go repository.** Check for required characteristics: ```bash # 1. Must be a Go repository test -f go.mod || echo "ERROR: Not a Go repository (no go.mod found)" # 2. Must have a Makefile test -f Makefile || echo "ERROR: No Makefile found" # 3. Check Makefile has test/lint targets grep -E "^(test|lint|tidy):" Makefile || echo "WARNING: Makefile missing common targets" Abort conditions: • ❌ No go.mod file exists → This is not a Go repository • ❌ No Makefile exists → This skill requires Makefile-based workflows • ⚠️ Makefile missing test/lint targets → Proceed with caution, manual validation required If repository is incompatible: Stop execution and inform the user: "This repository doesn't match the requirements for the go-pr-review skill (requires Go with Makefile). Would you like a standard code review instead?" ### 1. Gather PR Information Fetch the PR details using the gh CLI: • Get the PR diff and changed files • Identify the PR number and branch • Review the PR description and context ### 2. Analyze Changed Files Review all modified files with focus on: • Go code changes: Logic, patterns, error handling • Test files: Coverage of new functionality • Documentation: README, AGENTS.md, comments (check for AIDEV- anchors) • Configuration: go.mod, Makefile, YAML files ### 3. Check Makefile Commands Read the Makefile to identify available validation commands. Common commands include: • make lint - Run linters (golangci-lint) • make tidy - Format and tidy code • make test-api - Run integration/API tests (most critical for validating) ### 4. Run Validation Commands # Run tests and linting make lint && make tidy && make test-api Check for: • Test failures • Linting errors or warnings • Build failures • Documentation generation errors ### 5. Code Quality Review Review code against project standards from AGENTS.md (if exists) and references/go-standards.md: Architecture & Design • Does the change follow existing patterns? • Is the business logic in the correct layer? (handlers → service → API clients) • Are there any breaking changes to API contracts? Go Best Practices • Proper error handling (don't ignore errors) • Context propagation for cancellation • Resource cleanup (defer statements) • Concurrency safety (mutexes, channels) • No hardcoded values (use constants or env vars) Code Style • Follows project conventions (check neighboring files) • No unnecessary comments (unless documenting complex business logic) • Lowercase SQL keywords (e.g., select not SELECT) if applicable • Proper use of existing libraries (check go.mod) API Documentation (Swag) - If repository uses Swag • All HTTP handlers have complete Swag comments • Required annotations: @Summary, @Description, @Tags, @Router • All parameters documented with @Param • All response codes documented (@Success, @Failure) • Model references are correct Security • No secrets or credentials in code • Input validation on all user inputs • Proper authentication/authorization checks • No SQL injection risks (use parameterized queries/stored procedures) Testing • New functionality has test coverage • Tests are meaningful, not just for coverage numbers • Integration tests for API endpoints • Edge cases are considered ### 6. Review Anchor Comments Search for developer anchor comments: rg "AIDEV-(NOTE|TODO|QUESTION):" --type go These indicate areas an agent flagged for review. Assess whether: • The concern is valid • The implementation needs improvement Typically, the anchor should be removed before merge ### 7. Provide Structured Feedback Organize findings into categories: Critical Issues (must fix before merge) • Test failures • Build/lint errors • Security vulnerabilities • Breaking changes without versioning Suggestions (should consider) • Code quality improvements • Better error messages • Performance optimizations • Missing edge case tests Observations (nice to have) • Refactoring opportunities • Documentation enhancements • Code organization improvements ### 8. Summary and Recommendation Provide a clear verdict: • ✅ Approved: Ready to merge • ⚠️ Approved with suggestions: Can merge, but consider improvements • ❌ Request changes: Must address critical issues ## Example Review Workflow # 0. Validate repository compatibility test -f go.mod && test -f Makefile && echo "Repository compatible" || echo "Repository incompatible - ABORT" # 1. Get PR information gh pr view 123 --json number,title,body,changedFiles # 2. Get the diff gh pr diff 123 # 3. Check Makefile for available commands cat Makefile # 4. Run validations (adjust based on Makefile) make test-unit make test-api make lint make tidy make docs # 5. Search for anchor comments rg "AIDEV-" --type go # 6. Review changed files # (Use Read tool for each changed file) ## Reference Materials See references/go-standards.md for detailed Go code quality standards and common issues to watch for. ## Important Notes • Validate repository first - Don't waste time on incompatible repos • Never modify test files unless explicitly requested • Never change API contracts - version endpoints instead • Never alter migration files - data loss risk • Always verify tests pass before approving • Check that make commands succeed - this is critical validation • Look for AIDEV- comments - they highlight areas needing attention • Validate Swag comments for all new/modified handlers (if applicable) Remember: The goal is constructive feedback that improves code quality while respecting the developer's intent and design decisions.