# Code Review Setup - Prowler UI

Guide to set up automatic code validation with Claude Code in the commit hook.

## Overview

The code review system works like this:

1. **When you enable `CODE_REVIEW_ENABLED=true` in `.env`**
   - When you `git commit`, the pre-commit hook runs
   - Only validates TypeScript/JavaScript files you're committing
   - Uses Claude Code to check if they comply with AGENTS.md
   - If there are violations → **BLOCKS the commit**
   - If everything is fine → Continues normally

2. **When `CODE_REVIEW_ENABLED=false` (default)**
   - The pre-commit hook does not run validation
   - No standards validation
   - Developers can commit without restrictions

## Installation

### 1. Ensure Claude Code is in your PATH

```bash
# Verify that claude is available in terminal
which claude

# If it doesn't appear, check your Claude Code CLI installation
```

### 2. Enable validation in `.env`

In `/ui/.env`, find the "Code Review Configuration" section:

```bash
#### Code Review Configuration ####
# Enable Claude Code standards validation on commit hook
# Set to 'true' to validate changes against AGENTS.md standards via Claude Code
# Set to 'false' to skip validation
CODE_REVIEW_ENABLED=false  # ← Change this to 'true'
```

**Options:**
- `CODE_REVIEW_ENABLED=true` → Enables validation
- `CODE_REVIEW_ENABLED=false` → Disables validation (default)

### 3. The hook is ready

The `.husky/pre-commit` file already contains the logic. You don't need to install anything else.

## How It Works

### Normal Flow (with validation enabled)

```bash
$ git commit -m "feat: add new component"

# Pre-commit hook executes automatically
🚀 Prowler UI - Pre-Commit Hook
 ℹ️  Code Review Status: true

📋 Files to validate:
  - components/new-feature.tsx
  - types/new-feature.ts

📤 Sending to Claude Code for validation...

# Claude analyzes the files...

=== VALIDATION REPORT ===
STATUS: PASSED
All files comply with AGENTS.md standards.

✅ VALIDATION PASSED
# Commit continues ✅
```

### If There Are Violations

```bash
$ git commit -m "feat: add new component"

# Claude detects issues...

=== VALIDATION REPORT ===
STATUS: FAILED

- File: components/new-feature.tsx:15
  Rule: React Imports
  Issue: Using 'import * as React' instead of named imports
  Expected: import { useState } from "react"

❌ VALIDATION FAILED

Please fix the violations before committing:
  1. Review the violations listed above
  2. Fix the code according to AGENTS.md standards
  3. Commit your changes
  4. Try again

# Commit is BLOCKED ❌
```

## What Gets Validated

The system verifies that files comply with:

### 1. React Imports
```typescript
// ❌ WRONG
import * as React from "react"
import React, { useState } from "react"

// ✅ CORRECT
import { useState } from "react"
```

### 2. TypeScript Type Patterns
```typescript
// ❌ WRONG
type SortOption = "high-low" | "low-high"

// ✅ CORRECT
const SORT_OPTIONS = {
  HIGH_LOW: "high-low",
  LOW_HIGH: "low-high",
} as const
type SortOption = typeof SORT_OPTIONS[keyof typeof SORT_OPTIONS]
```

### 3. Tailwind CSS
```typescript
// ❌ WRONG
className="bg-[var(--color)]"
className="text-[#ffffff]"

// ✅ CORRECT
className="bg-card-bg text-white"
```

### 4. cn() Utility
```typescript
// ❌ WRONG
className={cn("flex items-center")}

// ✅ CORRECT
className={cn("h-3 w-3", isCircle ? "rounded-full" : "rounded-sm")}
```

### 5. React 19 Hooks
```typescript
// ❌ WRONG
const memoized = useMemo(() => value, [])

// ✅ CORRECT
// Don't use useMemo (React Compiler handles it)
const value = expensiveCalculation()
```

### 6. Zod v4 Syntax
```typescript
// ❌ WRONG
z.string().email()
z.string().nonempty()

// ✅ CORRECT
z.email()
z.string().min(1)
```

### 7. File Organization
```
// ❌ WRONG
Code used by 2+ features in feature-specific folder

// ✅ CORRECT
Code used by 1 feature → local in that feature
Code used by 2+ features → in shared/global
```

### 8. Use Directives
```typescript
// ❌ WRONG
export async function updateUser() { } // Missing "use server"

// ✅ CORRECT
"use server"
export async function updateUser() { }
```

## Disable Temporarily

If you need to commit without validation temporarily:

```bash
# Option 1: Change in .env
CODE_REVIEW_ENABLED=false
git commit

# Option 2: Use git hook bypass
git commit --no-verify

# Option 3: Disable the hook
chmod -x .husky/pre-commit
git commit
chmod +x .husky/pre-commit
```

**⚠️ Note:** `--no-verify` skips ALL hooks.

## Troubleshooting

### "Claude Code CLI not found"

```
⚠️ Claude Code CLI not found in PATH
To enable: ensure Claude Code is in PATH and CODE_REVIEW_ENABLED=true
```

**Solution:**
```bash
# Check where claude-code is installed
which claude-code

# If not found, add to your ~/.zshrc:
export PATH="$HOME/.local/bin:$PATH"  # or where it's installed

# Reload the terminal
source ~/.zshrc
```

### "Validation inconclusive"

If Claude Code cannot determine the status:

```
⚠️ Could not determine validation status
Allowing commit (validation inconclusive)
```

The commit is allowed automatically. If you want to be stricter, you can:

1. Manually review files against AGENTS.md
2. Report the analysis problem to Claude

### Build fails after validation

```
❌ Build failed
```

If validation passes but build fails:

1. Check the build error
2. Fix it locally
3. Commit and try again

## View the Full Report

Reports are saved in temporary files that are deleted afterward. To see the detailed report in real-time, watch the hook output:

```bash
git commit 2>&1 | tee commit-report.txt
```

This will save everything to `commit-report.txt`.

## For the Team

### Enable on your machine

```bash
cd ui
# Edit .env locally and set:
CODE_REVIEW_ENABLED=true
```

### Recommended Flow

1. **During development**: `CODE_REVIEW_ENABLED=false`
   - Iterate faster
   - Build check still runs

2. **Before final commit**: `CODE_REVIEW_ENABLED=true`
   - Verify you meet standards
   - Prevent PRs rejected for violations

3. **In CI/CD**: You could add additional validation
   - (future) Server-side validation in GitHub Actions

## Questions?

If you have questions about the standards being validated, check:
- `AGENTS.md` - Complete architecture guide
- `CLAUDE.md` - Project-specific instructions
