Adds the project-review workflow for code review independent of the git diff. The scope is parsed from the user instruction: 全面/整个项目 -> whole-project (score every source file), otherwise feature + target keyword (locate the code with semantic search + graph queries). - scoring_tools.py: score_review_func gains all_files=True to score every source file in the graph via store.get_all_files() - main.py: score_review_tool gains all_files param; registers the project_review MCP prompt (prompts 6->7) - prompts.py: project_review_prompt(scope, target) with whole-project and feature branches (fixed a precedence bug that truncated the feature text) - skills.py + skills/project-review/: new read-only project-review skill with shared checklists - .opencode/command/code-review-graph-project-review.md: slash command - tests: test_project_review.py (prompt rendering), TestProjectReviewPrompt, skill count assertions 5->6, all_files wiring checks - docs: prompts (6->7) + project-review entries across COMMANDS, CLAUDE, README (+localized), INDEX, architecture, LLM-OPTIMIZED-REFERENCE, CHANGELOG
1.2 KiB
1.2 KiB
Unified Review — Common Mistakes
- Skipping graph context — always run
get_minimal_contextfirst; CRG context is what makes the review token-efficient and blast-radius aware. - Rushing to fix — this skill is READ-ONLY. Present findings, wait for user decision. Never apply fixes, commit, or push.
- Ignoring tier — read
.code-review.yaml.fastskips Layer 2/3;strictrequires per-item confirmation for every blocker/major. - Judging metrics without evidence —
score_review_tooloutputs are heuristics. Cite the evidence, and let the LLM confirm SQL/exception/vuln findings before presenting them as facts. - Missing manual-review modules — payment, order, inventory, permission, distributed-lock, data-migration always require a manual review checklist.
- Forgetting enum completeness reads OUTSIDE the diff — grep sibling values, then read each consumer; in-diff review alone is insufficient.
- Batch-skipping blockers — 🔴 blockers cannot be batch-skipped; each needs an explicit user decision.
- Not producing the report — always call
generate_report_toolat the end and present the text report inline.