Code Review Skill
Systematic code review patterns covering security, performance, accessibility, quality, and testing across languages and frameworks.
Security Review
Critical Checks:
- Authentication tokens validated; authorization on sensitive ops
- Session management secure (httpOnly, secure, sameSite)
- No hardcoded credentials/API keys
- Proper RBAC implementation
- JWT tokens with proper algorithms (not 'none')
- Password hashing: bcrypt/argon2 (not MD5/SHA1)
Input Validation:
- User inputs sanitized
- SQL injection prevention (parameterized queries)
- XSS prevention (escaping/sanitization)
- CSRF tokens on state-changing ops
- File upload validation (type, size, content)
- JSON/XML size limits
- URL validation for redirects
Data Protection:
- Sensitive data encrypted at rest
- TLS/HTTPS for transit
- No sensitive data in logs
- PII handling regulation-compliant
- Secure random (crypto.randomBytes)
- Secrets in env vars or secret managers
- Encrypted database connections
OWASP Top 10: No injection, broken auth, data exposure, XXE, broken access control, misconfiguration, XSS, insecure deserialization, vulnerable components, insufficient logging
Performance Review
Database & Queries:
- N+1 queries identified and fixed
- Proper indexing on WHERE/JOIN columns
- Query result sets limited (pagination)
- Connection pooling implemented
- Expensive queries cached
- Batch operations instead of loops
Frontend Performance:
- Code splitting for large bundles
- Lazy loading routes/components
- Images optimized and lazy loaded
- CSS/JS minified and compressed
- Memoization for expensive computations
- Virtual scrolling for long lists
API & Network:
- API responses paginated
- GraphQL queries optimized (no over-fetching)
- Response compression (gzip/brotli)
- CDN for static assets
- HTTP/2 or HTTP/3
- Proper caching headers
- Rate limiting implemented
Memory Management:
- Event listeners removed
- No memory leaks (closures, timers)
- Large objects disposed
- File streams closed
- WeakMap/WeakSet for caching
Accessibility Review (WCAG 2.1 AA)
Semantic HTML:
- Proper heading hierarchy (h1, h2, h3)
- Semantic elements (nav, main, article, aside)
- Form labels properly associated
- Button vs link used correctly
- Tables with proper headers
Keyboard Navigation:
- All interactive elements accessible
- Logical tab order
- Focus indicators visible
- No keyboard traps
- Skip links for navigation
Screen Reader Support:
- All images have alt text
- ARIA labels where needed
- Live regions for dynamic content
- Hidden content marked properly
Color & Contrast:
- Text contrast >= 4.5:1 (normal)
- Text contrast >= 3:1 (large)
- Info not conveyed by color alone
Forms:
- Error messages associated with fields
- Required fields clearly marked
- Validation accessible
- Autocomplete attributes set
Code Quality Standards
Readability:
- Descriptive variable/function names
- Functions < 50 lines
- Consistent naming (camelCase, PascalCase)
- No magic numbers
- Proper indentation
Maintainability:
- DRY principle followed
- SOLID principles applied
- Low coupling, high cohesion
- Proper separation of concerns
- Configuration externalized
- Feature flags for gradual rollout
Error Handling:
- All errors caught and handled
- User-friendly messages
- Errors logged with context
- Graceful degradation
- Retry logic for transient failures
- Circuit breakers for external services
Comments:
- Complex logic explained
- Why, not what (code self-explanatory)
- TODO/FIXME with issue tracking
- JSDoc/TSDoc for public APIs
- No commented-out code
Testing Requirements
Unit Tests:
- All business logic tested
- Edge cases covered
- Error conditions tested
- Mocks for external dependencies
- Test coverage >= 80%
- Deterministic tests (no flaky)
Integration Tests:
- API endpoints tested
- Database operations tested
- External integrations tested
- Auth flows tested
E2E Tests:
- Critical user flows covered
- Happy paths tested
- Error scenarios tested
Test Quality:
- Readable and maintainable
- AAA pattern (Arrange, Act, Assert)
- Meaningful descriptions
- No interdependencies
- Fast execution (< 10s unit tests)
Language-Specific Patterns
TypeScript/JavaScript
Type Safety:
- No
any types (use unknown if needed)
- Strict mode enabled
- Union types over enums
- Proper generic constraints
- Type guards for narrowing
Modern Patterns:
- Destructuring and defaults
- Optional chaining (?.) and nullish coalescing (??)
- Async/await over promise chains
- Arrow functions for callbacks
React Components
Best Practices:
- Functional components with hooks
- Props properly typed
- Minimal, localized state
- Effect dependencies correct
- No inline function definitions
- Keys correct in lists
- useCallback/useMemo for optimization
Node.js
Server Setup:
- Error handling middleware
- Request validation
- Rate limiting
- Helmet for security headers
- CORS configured
- Graceful shutdown handling
Python
Best Practices:
- Type hints on functions
- PEP 8 compliance
- Context managers for resources
- List comprehensions over loops
- Dataclasses for data structures
SQL
Best Practices:
- Parameterized queries only
- Indexes on WHERE/JOIN columns
- LIMIT on large queries
- Transactions for consistency
- Specify columns (no SELECT *)
Review Process
File Change Analysis:
- High risk: auth, migrations, security config, payments, encryption
- Medium risk: business logic, API, queries, integrations
- Low risk: UI, tests, docs
Impact Assessment:
- Blast radius of change
- Backward compatibility
- Database migrations needed
- User impact
- Performance implications
- Security implications
Approval Criteria:
- No critical security issues
- Tests passing
- Code coverage maintained/improved
- Documentation updated
- No performance regressions
- Accessibility requirements met
- Code follows style guide
- Changes backward compatible (or migration plan exists)
Request Changes for:
- Critical security vulnerabilities
- Failing tests
- Missing test coverage
- Breaking changes without migration
- Performance regressions
- Accessibility violations
Common Issues Reference
Security: Hardcoded secrets, SQL injection, missing auth, weak random generation, PII in logs, missing CSRF
Performance: N+1 queries, missing indexes, unnecessary re-renders, large bundles, sync blocking ops, memory leaks
Code Smells: Functions > 50 lines, nesting > 3 levels, duplication, magic numbers, poor naming, god objects
Missing Error Handling: Unhandled rejections, missing try/catch, no input validation, silent failures, generic messages
Incomplete Tests: Missing edge cases, no error tests, flaky tests, no integration tests, no accessibility tests
Review Workflow
- Initial Scan (2 min): PR description, file changes, high-risk files
- Deep Dive (15-30 min): Review each file, apply checklists, note issues
- Testing Verification (5 min): Check coverage, test quality
- Documentation Check (3 min): Updated docs, breaking changes
- Feedback Generation (5 min): Organize by severity, code suggestions
- Decision (1 min): Approve, request changes, or comment
Tools Integration
Automated Checks:
- ESLint/Prettier: Code style
- SonarQube: Quality metrics
- Snyk/Dependabot: Security vulnerabilities
- Jest/Vitest: Test coverage
- Lighthouse: Performance/accessibility
- TypeScript: Type safety
Manual Review Focus:
- Business logic correctness
- Architecture decisions
- Security implications
- UX impact
- Maintainability
Best Practices Summary
- Security first
- Performance matters
- Accessibility is non-negotiable
- Quality over speed
- Constructive feedback
- Continuous improvement
1---2name: code-review-23description: This skill should be used when the user asks to "review code", "check changes", "analyze a PR", "do a security review", or "assess code quality" — providing comprehensive review across correctness, security, performance, accessibility, and testing.4---56# Code Review Skill78Systematic code review patterns covering security, performance, accessibility, quality, and testing across languages and frameworks.910## Security Review1112**Critical Checks:**13- Authentication tokens validated; authorization on sensitive ops14- Session management secure (httpOnly, secure, sameSite)15- No hardcoded credentials/API keys16- Proper RBAC implementation17- JWT tokens with proper algorithms (not 'none')18- Password hashing: bcrypt/argon2 (not MD5/SHA1)1920**Input Validation:**21- User inputs sanitized22- SQL injection prevention (parameterized queries)23- XSS prevention (escaping/sanitization)24- CSRF tokens on state-changing ops25- File upload validation (type, size, content)26- JSON/XML size limits27- URL validation for redirects2829**Data Protection:**30- Sensitive data encrypted at rest31- TLS/HTTPS for transit32- No sensitive data in logs33- PII handling regulation-compliant34- Secure random (crypto.randomBytes)35- Secrets in env vars or secret managers36- Encrypted database connections3738**OWASP Top 10:** No injection, broken auth, data exposure, XXE, broken access control, misconfiguration, XSS, insecure deserialization, vulnerable components, insufficient logging3940## Performance Review4142**Database & Queries:**43- N+1 queries identified and fixed44- Proper indexing on WHERE/JOIN columns45- Query result sets limited (pagination)46- Connection pooling implemented47- Expensive queries cached48- Batch operations instead of loops4950**Frontend Performance:**51- Code splitting for large bundles52- Lazy loading routes/components53- Images optimized and lazy loaded54- CSS/JS minified and compressed55- Memoization for expensive computations56- Virtual scrolling for long lists5758**API & Network:**59- API responses paginated60- GraphQL queries optimized (no over-fetching)61- Response compression (gzip/brotli)62- CDN for static assets63- HTTP/2 or HTTP/364- Proper caching headers65- Rate limiting implemented6667**Memory Management:**68- Event listeners removed69- No memory leaks (closures, timers)70- Large objects disposed71- File streams closed72- WeakMap/WeakSet for caching7374## Accessibility Review (WCAG 2.1 AA)7576**Semantic HTML:**77- Proper heading hierarchy (h1, h2, h3)78- Semantic elements (nav, main, article, aside)79- Form labels properly associated80- Button vs link used correctly81- Tables with proper headers8283**Keyboard Navigation:**84- All interactive elements accessible85- Logical tab order86- Focus indicators visible87- No keyboard traps88- Skip links for navigation8990**Screen Reader Support:**91- All images have alt text92- ARIA labels where needed93- Live regions for dynamic content94- Hidden content marked properly9596**Color & Contrast:**97- Text contrast >= 4.5:1 (normal)98- Text contrast >= 3:1 (large)99- Info not conveyed by color alone100101**Forms:**102- Error messages associated with fields103- Required fields clearly marked104- Validation accessible105- Autocomplete attributes set106107## Code Quality Standards108109**Readability:**110- Descriptive variable/function names111- Functions < 50 lines112- Consistent naming (camelCase, PascalCase)113- No magic numbers114- Proper indentation115116**Maintainability:**117- DRY principle followed118- SOLID principles applied119- Low coupling, high cohesion120- Proper separation of concerns121- Configuration externalized122- Feature flags for gradual rollout123124**Error Handling:**125- All errors caught and handled126- User-friendly messages127- Errors logged with context128- Graceful degradation129- Retry logic for transient failures130- Circuit breakers for external services131132**Comments:**133- Complex logic explained134- Why, not what (code self-explanatory)135- TODO/FIXME with issue tracking136- JSDoc/TSDoc for public APIs137- No commented-out code138139## Testing Requirements140141**Unit Tests:**142- All business logic tested143- Edge cases covered144- Error conditions tested145- Mocks for external dependencies146- Test coverage >= 80%147- Deterministic tests (no flaky)148149**Integration Tests:**150- API endpoints tested151- Database operations tested152- External integrations tested153- Auth flows tested154155**E2E Tests:**156- Critical user flows covered157- Happy paths tested158- Error scenarios tested159160**Test Quality:**161- Readable and maintainable162- AAA pattern (Arrange, Act, Assert)163- Meaningful descriptions164- No interdependencies165- Fast execution (< 10s unit tests)166167## Language-Specific Patterns168169### TypeScript/JavaScript170171**Type Safety:**172- No `any` types (use `unknown` if needed)173- Strict mode enabled174- Union types over enums175- Proper generic constraints176- Type guards for narrowing177178**Modern Patterns:**179- Destructuring and defaults180- Optional chaining (?.) and nullish coalescing (??)181- Async/await over promise chains182- Arrow functions for callbacks183184### React Components185186**Best Practices:**187- Functional components with hooks188- Props properly typed189- Minimal, localized state190- Effect dependencies correct191- No inline function definitions192- Keys correct in lists193- useCallback/useMemo for optimization194195### Node.js196197**Server Setup:**198- Error handling middleware199- Request validation200- Rate limiting201- Helmet for security headers202- CORS configured203- Graceful shutdown handling204205### Python206207**Best Practices:**208- Type hints on functions209- PEP 8 compliance210- Context managers for resources211- List comprehensions over loops212- Dataclasses for data structures213214### SQL215216**Best Practices:**217- Parameterized queries only218- Indexes on WHERE/JOIN columns219- LIMIT on large queries220- Transactions for consistency221- Specify columns (no SELECT *)222223## Review Process224225**File Change Analysis:**226- High risk: auth, migrations, security config, payments, encryption227- Medium risk: business logic, API, queries, integrations228- Low risk: UI, tests, docs229230**Impact Assessment:**231- Blast radius of change232- Backward compatibility233- Database migrations needed234- User impact235- Performance implications236- Security implications237238**Approval Criteria:**239- No critical security issues240- Tests passing241- Code coverage maintained/improved242- Documentation updated243- No performance regressions244- Accessibility requirements met245- Code follows style guide246- Changes backward compatible (or migration plan exists)247248**Request Changes for:**249- Critical security vulnerabilities250- Failing tests251- Missing test coverage252- Breaking changes without migration253- Performance regressions254- Accessibility violations255256## Common Issues Reference257258**Security:** Hardcoded secrets, SQL injection, missing auth, weak random generation, PII in logs, missing CSRF259260**Performance:** N+1 queries, missing indexes, unnecessary re-renders, large bundles, sync blocking ops, memory leaks261262**Code Smells:** Functions > 50 lines, nesting > 3 levels, duplication, magic numbers, poor naming, god objects263264**Missing Error Handling:** Unhandled rejections, missing try/catch, no input validation, silent failures, generic messages265266**Incomplete Tests:** Missing edge cases, no error tests, flaky tests, no integration tests, no accessibility tests267268## Review Workflow2692701. **Initial Scan** (2 min): PR description, file changes, high-risk files2712. **Deep Dive** (15-30 min): Review each file, apply checklists, note issues2723. **Testing Verification** (5 min): Check coverage, test quality2734. **Documentation Check** (3 min): Updated docs, breaking changes2745. **Feedback Generation** (5 min): Organize by severity, code suggestions2756. **Decision** (1 min): Approve, request changes, or comment276277## Tools Integration278279**Automated Checks:**280- ESLint/Prettier: Code style281- SonarQube: Quality metrics282- Snyk/Dependabot: Security vulnerabilities283- Jest/Vitest: Test coverage284- Lighthouse: Performance/accessibility285- TypeScript: Type safety286287**Manual Review Focus:**288- Business logic correctness289- Architecture decisions290- Security implications291- UX impact292- Maintainability293294## Best Practices Summary2952961. Security first2972. Performance matters2983. Accessibility is non-negotiable2994. Quality over speed3005. Constructive feedback3016. Continuous improvement