Quality Gates Skill
Objective
Enforce code quality standards by running automated checks that must pass before code can be committed, merged, or deployed. Acts as a guardian ensuring consistent quality across the codebase.
When to Use This Skill
Auto-invoke when:
- User completes feature implementation
- Before creating commits or pull requests
- User asks to "test", "validate", "check quality", or "verify"
- Before deployment or release
- After significant refactoring
Quality Gate Levels
Level 1: Pre-Commit Gates (Fast, < 30 seconds)
Essential checks that run before every commit.
Level 2: Pre-Push Gates (Moderate, < 2 minutes)
Comprehensive checks before pushing to remote.
Level 3: Pre-Deploy Gates (Thorough, < 5 minutes)
Complete validation before production deployment.
Gate Execution Workflow
Gate 1: Linting (JavaScript/TypeScript)
Purpose: Enforce code style and catch common errors
Tools: Bash, Read
Process:
- Detect linter by checking for:
- ESLint:
.eslintrc*,eslint.config.* - Biome:
biome.json - None: Skip this gate
- Read package.json to find lint script:
``json "scripts": { "lint": "eslint .", "lint:fix": "eslint . --fix" } ``
- Execute linter:
```bash # Try to run lint script npm run lint
# If fails, try direct commands npx eslint . || npx biome check . ```
- Parse results:
- Exit code 0: ✅ PASS
- Exit code non-zero: ❌ FAIL
- Extract error count and file locations
- Auto-fix attempt (if failures found):
``bash npm run lint:fix || npx eslint . --fix ``
Success Criteria: Zero linting errors (warnings acceptable)
Gate 2: Type Checking (TypeScript)
Purpose: Verify type safety and catch type errors
Tools: Bash, Read, Grep
Process:
- Detect TypeScript by checking for:
tsconfig.json- TypeScript in dependencies
- Read tsconfig.json to check strictness:
strict: truenoImplicitAny,strictNullChecks, etc.
- Execute type checker:
```bash # Try to run typecheck script npm run typecheck || npm run type-check
# If no script, run directly npx tsc --noEmit ```
- Parse results:
- Exit code 0: ✅ PASS
- Exit code non-zero: ❌ FAIL
- Extract error count and locations
Success Criteria: Zero type errors
Gate 3: Unit & Integration Tests
Purpose: Verify code functionality and prevent regressions
Tools: Bash, Read, Grep
Process:
- Detect test framework:
- Vitest:
vitest.config.*,vitestin dependencies - Jest:
jest.config.*,jestin dependencies - Native test:
--testflag with Node.js 20+
- Count test files:
``bash # Use Grep to find test files find . -name ".test." -o -name ".spec." | wc -l ``
- Execute tests:
```bash # Run unit tests (fast) npm run test || npm run test:unit
# Or direct command npx vitest run || npx jest --ci ```
- Parse results:
- Total tests run
- Passed / Failed / Skipped
- Coverage percentage (if available)
- Coverage check (if configured):
```bash npm run test:coverage
# Check if meets threshold (e.g., 80%) ```
Success Criteria:
- All tests pass (100%)
- Coverage ≥ configured threshold (if set)
Gate 4: Build Verification
Purpose: Ensure code compiles and builds without errors
Tools: Bash
Process:
- Detect build system:
- Next.js:
next build - Vite:
vite build - Webpack:
webpack --mode production - TypeScript:
tsc
- Execute build:
``bash npm run build ``
- Check build artifacts:
- Verify output directory exists:
dist/,build/,.next/ - Check for build errors in logs
- Clean up (optional):
``bash # Remove build artifacts to save space rm -rf dist/ build/ .next/ ``
Success Criteria: Build completes with exit code 0
Gate 5: Security Audit
Purpose: Identify known vulnerabilities in dependencies
Tools: Bash, Read
Process:
- Run npm/pnpm audit:
``bash npm audit --json || pnpm audit --json ``
- Parse audit results:
- Critical vulnerabilities: 0
- High vulnerabilities: 0
- Moderate vulnerabilities: < threshold
- Low vulnerabilities: informational
- Check for specific vulnerabilities:
- Prototype pollution
- Remote code execution (RCE)
- SQL injection
- Cross-site scripting (XSS)
- Suggest fixes:
``bash npm audit fix # or npm audit fix --force # (if safe) ``
Success Criteria:
- Zero critical/high vulnerabilities
- Moderate vulnerabilities acknowledged or fixed
Gate 6: Code Complexity Analysis (Optional)
Purpose: Flag overly complex code that may need refactoring
Tools: Grep, Bash
Process:
- Detect code complexity tools:
- eslint-plugin-complexity
- SonarQube
- CodeClimate
- Basic complexity checks:
```bash # Find files with excessive lines find src -name "*.{ts,tsx,js,jsx}" -exec wc -l {} \; | awk '$1 > 500'
# Find deeply nested code (>5 levels) grep -rn "^[[:space:]]\{20,\}" src/
# Count TODO/FIXME grep -rn "TODO\|FIXME\|HACK" src/ | wc -l ```
Success Criteria:
- No files > 500 lines (warning only)
- No nesting > 5 levels (warning only)
Gate 7: Git Pre-Commit Checks
Purpose: Ensure commit quality and prevent sensitive data leaks
Tools: Bash, Grep
Process:
- Check for sensitive data:
```bash # Search for API keys, secrets, tokens git diff --cached | grep -i "api[_-]key\|secret\|password\|token"
# Check for .env files being committed git diff --cached --name-only | grep "\.env$" ```
- Validate commit message (if Conventional Commits):
- Format:
type(scope): description - Types: feat, fix, docs, style, refactor, test, chore
- Check file sizes:
``bash # Flag files > 1MB git diff --cached --name-only | xargs ls -lh | awk '$5 > 1000000' ``
Success Criteria:
- No secrets in diff
- No .env files
- No large files (> 1MB)
Execution Strategy
Sequential Execution (Default)
Run gates in order, stop on first failure:
Lint → TypeCheck → Test → Build → Audit
Parallel Execution (Fast Mode)
Run independent gates simultaneously:
[Lint + TypeCheck + Test] → Build → Audit
Selective Execution
Run only relevant gates based on changes:
.ts/.tsxfiles changed → TypeCheck- Dependencies updated → Audit
- Test files changed → Tests only
Output Format
# Quality Gate Results
## Summary
✅ 5/7 Gates Passed | ❌ 2/7 Gates Failed
## Gate Details
### ✅ Gate 1: Linting
- **Status**: PASS
- **Duration**: 3.2s
- **Details**: 0 errors, 2 warnings
### ❌ Gate 2: Type Checking
- **Status**: FAIL
- **Duration**: 5.1s
- **Errors**: 3 type errors found
- `src/components/Button.tsx:15` - Property 'onClick' is missing
- `src/utils/api.ts:42` - Type 'string' is not assignable to type 'number'
- `src/hooks/useAuth.ts:8` - Cannot find name 'User'
### ✅ Gate 3: Tests
- **Status**: PASS
- **Duration**: 12.4s
- **Tests**: 124 passed, 0 failed, 2 skipped
- **Coverage**: 87% (target: 80%)
### ⏭️ Gate 4: Build
- **Status**: SKIPPED (previous gate failed)
### ⏭️ Gate 5: Security Audit
- **Status**: SKIPPED (previous gate failed)
## Action Required
Fix the 3 type errors in Gate 2 before proceeding.
## Recommendations
1. Run `npm run typecheck` locally to see full error details
2. Consider adding pre-commit hooks to catch these earlier
3. Current code coverage (87%) exceeds target - excellent work!
Integration with Git Hooks
Setup Husky + lint-staged (Recommended)
Check if installed:
test -d .husky && echo "Husky installed" || echo "Husky not found"
Suggest installation if missing:
npm install --save-dev husky lint-staged
np