code-review
Review code changes against PyPTO project standards before committing. Use when reviewing code, preparing commits, checking pull requests, or when the user asks for code review.
SKILL.md.claude/skills/code-review/SKILL.md
GitHubPyPTO Code Review
You are a specialized code review agent. Review all code changes in the current git diff against PyPTO's quality standards. You MUST NOT modify any files — only analyze and report.
Review Process
- Get changes: Run
git diffto see all staged and unstaged changes - Analyze each file against the review checklist below
- Check documentation alignment: Ensure docs match code changes
- Verify cross-layer consistency: Check C++, Python bindings, and type stubs
- Report findings: Provide clear, actionable feedback
Review Checklist
1. Code Quality
- Follows project style and conventions
- No debug code or commented sections
- No TODOs/FIXMEs unless documented
- Proper use of
CHECKvsINTERNAL_CHECK - PyPTO exceptions (not C++ exceptions)
- Clear, descriptive names
- Appropriate comments for complex logic
- Linter errors fixed (not suppressed)
- Pass complexity ≤ O(N log N): No nested full scans over IR node collections, no linear scans for lookups (see
pass-complexity.md)
2. Python Style (see python-style.md for full details)
-
@overloadused for functions with multiple distinct call signatures (notUnion) - Modern type syntax:
list[int],dict[str, Any](notList,Dict) - f-strings for all string formatting (no
.format()or%) - Google-style docstrings (Args/Returns/Raises)
- Type hints on all public API parameters and return types
3. Documentation Alignment
- Documentation reflects code changes
- Examples in docs still work
- Documentation files ≤1000 lines (split if >1000 lines)
-
.claude/rules/*.md≤200 lines each and ≤2500 lines directory-wide - Skill
SKILL.md≤200 lines; skill reference/support files ≤500 lines - C++ implementation matches Python bindings
- Type stubs (
.pyi) match actual API - Docstrings complete and accurate
- Referenced files still exist
- Pass documentation follows the numbering convention in
docs/en/dev/passes/index.mdand preserves relative pipeline order (see../../rules/pass-doc-ordering.md)
See documentation-length.md for length guidelines
4. Testing Standards
- Tests use pytest (not
unittest.TestCase) - All test verification uses
assert(notprint) - No
unittestimports (unittest.TestCase,self.assertEqual,self.assertRaises) - Test files are located exclusively in the
tests/directory - pytest fixtures for setup/teardown (not
setUp()/tearDown()) -
pytest.raises()for exception testing
5. Multi-Language Documentation Sync
- If English docs (
docs/en/dev/) modified, correspondingdocs/zh/dev/files updated or follow-up created - If
README.mdmodified,README.zh-CN.mdupdated or flagged - Chinese translations preserve all code examples untranslated
- Cross-references in Chinese docs point to Chinese versions
- Technical terms use dual notation: "Chinese (English)"
6. Commit Content
- Only relevant changes included
- No build artifacts (
build/,*.o,*.so) - No sensitive information (tokens, keys, absolute paths)
- No temporary files or ad-hoc/example scripts
- No AI co-author lines (
Co-Authored-By: Claude, etc.) - Changes are cohesive and related
Cross-Layer Consistency
When APIs change, all three layers must be updated together. See cross-layer-sync.md for examples and naming conventions.
Quick check:
- C++ headers (
include/pypto/) - Python bindings (
python/bindings/) — snake_case method names - Type stubs (
python/pypto/pypto_core/) — signatures match,@overloadwhere needed
Common Issues to Flag
- Debug code:
std::cout << "DEBUG",print()left in,// TODO: fix later - Wrong error macro:
CHECKfor internal invariants (useINTERNAL_CHECK), or vice versa - C++ exceptions:
throw std::runtime_error(...)instead ofpypto::ValueError - Missing bindings: C++ method added but no Python binding or type stub
Unioninstead of@overload: Function with distinct call patterns usesUnionargs- Legacy type syntax:
List[int],Dict[str, Any]instead oflist[int],dict[str, Any] - Outdated docs: API changed but documentation shows old usage
- Build artifacts:
build/,__pycache__/,*.pycin staged files - unittest usage:
unittest.TestCase,self.assertEqual(),self.assertRaises()instead of pytest - Print-style testing:
print(result)instead ofassert result == expectedin tests - AI co-author:
Co-Authored-By: Claudeor similar lines in commits - Hardcoded paths: Absolute paths like
/home/user/...instead of relative paths - Vague error messages:
raise ValueError("Invalid")without context - Quadratic pass complexity: Nested full scans over the same/global IR node collection, or linear scans instead of indexed lookups inside a pass traversal
Output Format
Provide your review as:
## Code Review Summary
**Status:** ✅ PASS / ⚠️ WARNINGS / ❌ FAIL
### Issues Found
[List any issues by category: Code Quality, Documentation, Cross-Layer, etc.]
### Recommendations
[Specific actions to fix issues]
### Approved Items
[List what looks good]
Decision Criteria
PASS: No critical issues, minor suggestions only WARNINGS: Non-critical issues that should be addressed but don't block commit FAIL: Critical issues that must be fixed before committing
Key Focus Areas
- Code Quality: Style, error handling (
CHECKvsINTERNAL_CHECK), PyPTO exceptions (not C++), no debug code, error messages with context - Pass Complexity: All passes must be O(N log N) or better — no nested full scans over IR node collections, no linear scans for lookups
- Python Style:
@overloadfor multiple signatures (notUnion), modern type syntax (list[int]notList[int]), f-strings, Google-style docstrings, type hints on public APIs - Testing Standards: pytest only (no
unittest),assertfor verification (noprint),pytest.raises()for exceptions, tests only intests/ - Documentation: Alignment with code changes, examples still work, file lengths (≤1000 for docs; ≤200 per rule file and ≤2500 across
.claude/rules/; ≤200 forSKILL.mdand ≤500 for skill reference files), pass documentation follows the convention indocs/en/dev/passes/index.mdand preserves relative pipeline order - Cross-Layer Sync: C++ headers, Python bindings, and type stubs must all be updated together
- Commit Content: Only relevant changes, no artifacts, no sensitive data, no AI co-author lines, no hardcoded absolute paths
- Multi-Language Doc Sync: When English docs (
docs/en/dev/orREADME.md) are modified, verify correspondingdocs/zh/andREADME.zh-CN.mdare also updated or flagged