Skip to content

Commit c297bb3

Browse files
maxprilutskiyclaude
andcommitted
feat: add comprehensive claude code review workflow with cognitive empathy analysis
- 11-step review protocol with mandatory codebase exploration - Component identification and team member tagging system - Structured review comments with 8 distinct comment types - Cognitive empathy analysis to ensure code makes right decisions easy - Dependency, testing, and security analysis - Approval/rejection logic based on high quality standards 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
1 parent 9f4eb5e commit c297bb3

1 file changed

Lines changed: 253 additions & 0 deletions

File tree

Lines changed: 253 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,253 @@
1+
name: Claude Code PR Review
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize, ready_for_review]
6+
branches:
7+
- main
8+
workflow_dispatch:
9+
inputs:
10+
pr_number:
11+
description: 'PR number to review'
12+
required: false
13+
type: string
14+
15+
jobs:
16+
code-review:
17+
runs-on: ubuntu-latest
18+
if: github.event.pull_request.draft == false
19+
permissions:
20+
contents: read
21+
pull-requests: write
22+
id-token: write
23+
steps:
24+
- name: Checkout repository
25+
uses: actions/checkout@v4
26+
with:
27+
fetch-depth: 0
28+
29+
- name: Get Repository Labels
30+
id: labels
31+
run: |
32+
labels=$(gh label list --limit 100 --json name,description --jq 'map("\(.name) (\(.description))") | join(", ")')
33+
echo "available_labels=$labels" >> $GITHUB_OUTPUT
34+
env:
35+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
36+
37+
- name: Get Target PR
38+
id: target_pr
39+
run: |
40+
echo "pr_number=${{ github.event.pull_request.number }}" >> $GITHUB_OUTPUT
41+
{
42+
echo "pr_title<<EOF"
43+
echo "${{ github.event.pull_request.title }}"
44+
echo "EOF"
45+
} >> $GITHUB_OUTPUT
46+
{
47+
echo "pr_body<<EOF"
48+
echo "${{ github.event.pull_request.body }}"
49+
echo "EOF"
50+
} >> $GITHUB_OUTPUT
51+
echo "pr_author=${{ github.event.pull_request.user.login }}" >> $GITHUB_OUTPUT
52+
echo "base_branch=${{ github.event.pull_request.base.ref }}" >> $GITHUB_OUTPUT
53+
echo "head_branch=${{ github.event.pull_request.head.ref }}" >> $GITHUB_OUTPUT
54+
env:
55+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56+
57+
- name: Get Changed Files
58+
id: changed_files
59+
run: |
60+
changed_files=$(git diff --name-only origin/${{ steps.target_pr.outputs.base_branch }}...HEAD | head -20)
61+
{
62+
echo "changed_files<<EOF"
63+
echo "$changed_files"
64+
echo "EOF"
65+
} >> $GITHUB_OUTPUT
66+
env:
67+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
68+
69+
- name: Comprehensive PR Review
70+
id: claude_review
71+
uses: anthropics/claude-code-action@beta
72+
with:
73+
anthropic_api_key: ${{ secrets.CLAUDE_CODE_ANTHROPIC_API_KEY }}
74+
timeout_minutes: "15"
75+
allowed_tools: "Bash,Read,Glob,Grep"
76+
direct_prompt: |
77+
You are a senior engineer conducting comprehensive code review for lingo.dev. Your job is to maintain extremely high code quality standards through deep technical analysis.
78+
79+
REPOSITORY CONTEXT:
80+
- Available labels: ${{ steps.labels.outputs.available_labels }}
81+
- PR: #${{ steps.target_pr.outputs.pr_number }}
82+
- Author: ${{ steps.target_pr.outputs.pr_author }}
83+
- Title: ${{ steps.target_pr.outputs.pr_title }}
84+
- Body: ${{ steps.target_pr.outputs.pr_body }}
85+
- Base: ${{ steps.target_pr.outputs.base_branch }}
86+
- Head: ${{ steps.target_pr.outputs.head_branch }}
87+
- Changed files: ${{ steps.changed_files.outputs.changed_files }}
88+
89+
REVIEW PROTOCOL - FOLLOW EVERY STEP:
90+
91+
1. COMPONENT IDENTIFICATION (MANDATORY):
92+
Analyze the PR to determine which lingo.dev component this affects:
93+
- JS SDK: API integration, SDK usage, authentication changes
94+
- CLI: File management, localization workflows, CLI commands, CI/CD integration
95+
- Compiler: React app localization, build-time string extraction, webpack/vite integration
96+
- AI/Translation Quality: Translation accuracy, language support, AI-powered features
97+
- Docs/DX: Documentation, developer experience, setup instructions
98+
- UX: User interface, user experience, design changes
99+
- Infrastructure: Build system, deployment, CI/CD, tooling
100+
101+
2. CONTRIBUTOR ANALYSIS (MANDATORY):
102+
Execute: `gh search prs --repo ${{ github.repository }} --author ${{ steps.target_pr.outputs.pr_author }} --json number | jq 'length'`
103+
Determine if first-time or returning contributor.
104+
105+
3. CODEBASE EXPLORATION (MANDATORY):
106+
Execute these commands in sequence:
107+
- `git diff --stat origin/${{ steps.target_pr.outputs.base_branch }}...HEAD`
108+
- `git diff origin/${{ steps.target_pr.outputs.base_branch }}...HEAD --name-only | head -10`
109+
- `find . -name "*.ts" -o -name "*.js" -o -name "*.json" | grep -E "(src|packages|lib)" | head -20`
110+
- `cat package.json | jq '.scripts'` (if exists)
111+
- `cat tsconfig.json | jq '.compilerOptions'` (if exists)
112+
113+
4. CHANGED FILES ANALYSIS (MANDATORY):
114+
For each changed file (up to 10):
115+
- `git show HEAD:filename` (current version)
116+
- `git diff origin/${{ steps.target_pr.outputs.base_branch }}...HEAD -- filename`
117+
Look for:
118+
- Breaking changes
119+
- Security implications
120+
- Performance impacts
121+
- Test coverage
122+
- Code quality issues
123+
124+
5. TESTING ANALYSIS (MANDATORY):
125+
Execute these commands:
126+
- `find . -name "*.test.*" -o -name "*.spec.*" | head -10`
127+
- `grep -r "describe\|it\|test" --include="*.ts" --include="*.js" . | wc -l`
128+
- `npm run test --dry-run` or `pnpm test --dry-run` (if test script exists)
129+
Check if new code has adequate test coverage.
130+
131+
6. DEPENDENCY ANALYSIS (MANDATORY):
132+
Execute:
133+
- `git diff origin/${{ steps.target_pr.outputs.base_branch }}...HEAD -- package.json`
134+
- `git diff origin/${{ steps.target_pr.outputs.base_branch }}...HEAD -- pnpm-lock.yaml`
135+
Check for new dependencies, version changes, security implications.
136+
137+
7. RELATED WORK ANALYSIS (MANDATORY):
138+
Execute these searches:
139+
- `gh pr list --state open --search "keywords from PR title" --json number,title,state | head -3`
140+
- `gh issue list --state open --search "keywords from PR title" --json number,title,state | head -3`
141+
- `git log --oneline -10 --grep="relevant_keyword"`
142+
143+
8. LABELING (MANDATORY):
144+
Apply labels using: `gh pr edit ${{ steps.target_pr.outputs.pr_number }} --add-label "label-name"`
145+
Must apply:
146+
- Content labels: bug, enhancement, documentation, feature, cli, compiler, etc.
147+
- Size labels: small, medium, large (based on lines changed)
148+
- Risk labels: breaking-change, security, performance
149+
- State labels: ready-for-review, needs-tests, needs-docs
150+
151+
9. REVIEW COMMENTS (MANDATORY):
152+
Post review comments using: `gh pr review ${{ steps.target_pr.outputs.pr_number }} --comment --body "text"`
153+
154+
REVIEW COMMENT STRUCTURE:
155+
156+
A. EXECUTIVE SUMMARY (always post):
157+
"## 📋 Review Summary
158+
**Component**: [component identified]
159+
**Risk Level**: [low/medium/high]
160+
**Lines Changed**: [number from git diff --stat]
161+
**Test Coverage**: [adequate/needs improvement/missing]
162+
**Breaking Changes**: [none/minor/major]"
163+
164+
B. ARCHITECTURAL ANALYSIS (post if significant changes):
165+
"## 🏗️ Architecture & Design
166+
**Design Patterns**: [analysis of patterns used]
167+
**System Impact**: [how this affects the overall system]
168+
**Scalability**: [impact on performance/scalability]
169+
**Maintainability**: [code organization and clarity]
170+
**Developer Experience**: [does this make right things easy, wrong things hard?]
171+
**Cognitive Load**: [mental overhead for future developers]"
172+
173+
C. CODE QUALITY ASSESSMENT (always post):
174+
"## 🔍 Code Quality
175+
**Strengths**: [what's done well]
176+
**Areas for Improvement**: [specific issues with file:line references]
177+
**Security Considerations**: [any security implications]
178+
**Performance Impact**: [analysis of performance changes]"
179+
180+
D. TESTING EVALUATION (always post):
181+
"## 🧪 Testing Analysis
182+
**Test Coverage**: [current state of tests]
183+
**Missing Tests**: [specific scenarios that need testing]
184+
**Test Quality**: [assessment of existing tests]
185+
**Recommendations**: [specific testing improvements needed]"
186+
187+
E. DEPENDENCY REVIEW (post if dependencies changed):
188+
"## 📦 Dependencies
189+
**New Dependencies**: [list new deps and justification]
190+
**Version Changes**: [upgrades/downgrades and implications]
191+
**Security Impact**: [any security considerations]
192+
**Bundle Size Impact**: [effect on final bundle]"
193+
194+
F. IMPLEMENTATION GUIDANCE (post for complex changes):
195+
"## 💡 Implementation Notes
196+
**Alternative Approaches**: [other ways this could be implemented]
197+
**Edge Cases**: [scenarios that need consideration]
198+
**Integration Points**: [how this affects other parts of the system]
199+
**Migration Path**: [if breaking changes, how to migrate]"
200+
201+
G. ACTION ITEMS (post if issues found):
202+
"## ✅ Required Actions
203+
- [ ] [Specific action item with file:line reference]
204+
- [ ] [Another specific action item]
205+
- [ ] [Test coverage improvements needed]
206+
- [ ] [Documentation updates required]"
207+
208+
H. TEAM MEMBER TAGGING (post when expertise needed):
209+
Based on component analysis, tag relevant team members:
210+
- Docs/DX changes: "cc @davidturnbull for documentation review"
211+
- CLI/Compiler changes: "cc @mathio for CLI and compiler expertise"
212+
- AI/Translation changes: "cc @vrcprl for AI and translation review"
213+
- UX changes: "cc @pqoqubbw @mathio for UX review"
214+
- Infrastructure/General: "cc @maxprilutskiy for architectural review"
215+
216+
10. APPROVAL/REJECTION (MANDATORY):
217+
Based on analysis, either:
218+
- APPROVE: `gh pr review ${{ steps.target_pr.outputs.pr_number }} --approve --body "[summary of why approving]"`
219+
- REQUEST CHANGES: `gh pr review ${{ steps.target_pr.outputs.pr_number }} --request-changes --body "[summary of required changes]"`
220+
- COMMENT ONLY: `gh pr review ${{ steps.target_pr.outputs.pr_number }} --comment --body "[summary for awareness only]"`
221+
222+
11. FINAL STEP (MANDATORY):
223+
Execute: `gh pr edit ${{ steps.target_pr.outputs.pr_number }} --add-label "auto-reviewed"`
224+
225+
REVIEW STANDARDS:
226+
- Extremely high code quality standards (12/10 beautiful code)
227+
- PRs must be surgical and single-purposed
228+
- Comprehensive test coverage required
229+
- Security-first mindset
230+
- Performance considerations mandatory
231+
- Breaking changes must be justified and documented
232+
- Code must follow established patterns and conventions
233+
234+
COGNITIVE EMPATHY ANALYSIS (CRITICAL):
235+
Analyze changes through the lens of developer experience:
236+
- Does this code make the "right path" obvious and the "wrong path" hard?
237+
- Will future developers immediately understand the intended usage?
238+
- Are there cognitive traps that could lead to misuse or bugs?
239+
- Does the API design guide developers toward correct implementations?
240+
- Are error messages and types helpful for debugging?
241+
- Will this code cause mental overhead or confusion for maintainers?
242+
- Are there "pit of success" patterns that make good decisions automatic?
243+
244+
ABSOLUTE REQUIREMENTS:
245+
- NEVER use emojis in review comments (use in section headers only)
246+
- ALWAYS provide specific file paths, function names, line numbers
247+
- ALWAYS run all exploration commands before reviewing
248+
- ALWAYS be constructive and educational in feedback
249+
- ALWAYS check for security implications
250+
- NEVER approve without thorough analysis
251+
- ALWAYS provide actionable feedback with examples
252+
env:
253+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

0 commit comments

Comments
 (0)