Skip to content

Commit 9324ffa

Browse files
committed
[skills, ci] feat: add reusable agent skills and Claude project config
Introduce two general-purpose Claude Code skills plus the project-level configuration that lets any contributor invoke them. Skills (under skills/): - code-review: framework-agnostic PR review prompt. 10 review areas (correctness, security, API design, performance, reliability/obs, testing, readability, docs, conventions, repo hygiene), 4-tier severity (🔴 Critical / 🟠 Major / 🟡 Minor / 🟢 Nit), structured verdict + checklist output. Used by the claude-review workflow. - submit-pr: PR submission workflow. Validates branch state, derives a CI-conformant title from the diff, generates the description, gets user approval, then pushes and opens the PR via gh. Project config: - .claude/settings.json: allow-list a small set of read-only git and pre-commit commands so they run without per-call prompts. - .claude/skills -> ../skills: makes the skills discoverable by Claude Code's project-level skill loader. - .gitignore: keep .claude/projects/ and .claude/credentials/ out of git while allowing settings.json and the skills symlink to be committed. - CLAUDE.md: add a Code Review section telling the reviewer agent to follow skills/code-review/SKILL.md and to post each finding as an inline comment via the create_inline_comment MCP tool, reserving the top-level summary for verdict + checklist only.
1 parent c5c4205 commit 9324ffa

6 files changed

Lines changed: 401 additions & 1 deletion

File tree

.claude/settings.json

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"permissions": {
3+
"allow": [
4+
"Bash(git status)",
5+
"Bash(git log*)",
6+
"Bash(git diff*)",
7+
"Bash(git branch*)",
8+
"Bash(git remote -v)",
9+
"Bash(pre-commit run*)"
10+
]
11+
}
12+
}

.claude/skills

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
../skills

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,8 @@ coverage.xml
6161
# IDE / Editor
6262
.idea/
6363
.vscode/
64-
.claude/
64+
.claude/projects/
65+
.claude/credentials/
6566
*.swp
6667
*.swo
6768
*~

CLAUDE.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,9 @@ Megatron-LM is managed as a git submodule (`third_party/Loong-Megatron` → `bai
183183
## Patches
184184

185185
`patches/TransformerEngine_v2.9/` contains patch files applied to upstream TransformerEngine during setup. These implement LoongForge-specific optimizations and fixes.
186+
187+
## Code Review
188+
189+
When asked to review a pull request or a diff (e.g. via `@claude review this PR`), follow `skills/code-review/SKILL.md` exactly: its checklist, severity tags (🔴 Critical / 🟠 Major / 🟡 Minor / 🟢 Nit), and output format are the authoritative contract for review output.
190+
191+
**Posting findings — prefer inline comments.** For every finding tied to specific code, call the `mcp__github_inline_comment__create_inline_comment` tool to post it on the exact `file:line` (or `startLine``line` range) instead of listing it in the summary. Use the top-level summary comment ONLY for: the overall `Verdict`, the 2–4 sentence `Summary`, the `Tests` line, and the `Checklist` table. Each inline comment body should follow the same severity-tag format as the SKILL spec (`🔴 Critical: ...`, `🟠 Major: ...`, etc.). Set `confirmed: true` only on real review findings — never on probes or self-tests.

skills/code-review/SKILL.md

Lines changed: 202 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,202 @@
1+
---
2+
name: code-review
3+
description: General-purpose code review for pull requests and local diffs. Produces a structured verdict with file:line citations, severity-tagged findings, and a concise verdict. Use as a GitHub Action bot prompt or before commit/PR submission. Triggers on 'review PR', 'review diff', 'code review', 'check PR', 'review changes', 'review my changes'.
4+
---
5+
6+
# Code Review
7+
8+
You are a senior software engineer performing a careful, framework-agnostic code review. Your job is to help the author ship correct, secure, maintainable code — not to nitpick style or restate what the diff already shows.
9+
10+
## Step 1 — Gather Context
11+
12+
Before producing any finding:
13+
14+
1. Read the PR title, description, and any linked issue. Note the stated intent.
15+
2. Get the full diff: `git diff <base>...HEAD` (or against `origin/<default-branch>` when no base is given).
16+
3. For each modified file, **read the full file**, not just the hunk — context outside the hunk often reveals the real problem.
17+
4. Read repo-level conventions if present: `CLAUDE.md`, `AGENTS.md`, `CONTRIBUTING.md`, `.editorconfig`, lint configs. The review must respect these.
18+
5. Identify untouched call sites, tests, and configs that the change could break. Read them.
19+
6. Check existing review comments / CI output to avoid duplicating findings.
20+
21+
If the diff is large (>~500 lines or >~20 files), prioritize: critical paths first (auth, data, public APIs, infra), then the rest. State explicitly what you sampled vs. read in full.
22+
23+
## Step 2 — Scope the Review
24+
25+
Comment only on:
26+
27+
- Lines changed in the diff and code directly affected by them.
28+
- Pre-existing code only when the diff makes it newly broken or newly unsafe.
29+
30+
Do **not** comment on:
31+
32+
- Pre-existing issues unrelated to the diff.
33+
- Style/formatting handled by the project's linter/formatter.
34+
- Hypothetical refactors outside the PR's stated goal.
35+
36+
## Step 3 — Evaluate Against the Checklist
37+
38+
Skip categories that don't apply. For each finding, assign a severity (see Step 4) and cite `file:line`.
39+
40+
### A. Correctness
41+
42+
- Logic errors, off-by-one, wrong operator, inverted condition, wrong default.
43+
- Edge cases: empty input, `null`/`undefined`/`None`, zero, negative, very large, unicode/multibyte, leading/trailing whitespace.
44+
- Concurrency: race conditions, shared mutable state, missing locks, ordering assumptions, async cancellation.
45+
- Error handling: silently swallowed exceptions, wrong exception type, missing retry/backoff, partial failures left inconsistent.
46+
- Resource lifecycle: file handles, sockets, DB connections, goroutines/tasks, listeners — opened but not closed; closed twice.
47+
48+
### B. Security
49+
50+
- Input validation and sanitization on all trust boundaries.
51+
- Injection: SQL, command, XSS, SSRF, path traversal, log injection, template injection.
52+
- AuthN / AuthZ checks on new endpoints, RPCs, or background jobs.
53+
- Secrets: no API keys, tokens, passwords, private keys in code, configs, logs, or error messages.
54+
- Unsafe deserialization (`pickle.load`, `yaml.load` without `SafeLoader`, `torch.load` without `weights_only=True` on untrusted data, `eval`/`exec` on user input).
55+
- `subprocess` / `shell=True` with user-controlled input.
56+
- Dependency risk: typosquatted names, unpinned versions, abandoned packages.
57+
- PII / sensitive data: not logged, not echoed back, properly redacted.
58+
59+
### C. API & Interface Design
60+
61+
- Backward compatibility: breaking signature, behavior, or default changes are flagged and justified.
62+
- Naming: descriptive but not verbose; consistent with surrounding code.
63+
- Parameter order, return shape, error contract are stable and documented.
64+
- Public vs. internal surface area is intentional (private helpers stay private).
65+
- Idempotency and side effects match what callers expect.
66+
67+
### D. Performance & Resources
68+
69+
- Obvious wins: N+1 queries, repeated work in loops, accidental quadratic behavior, redundant allocations in hot paths.
70+
- Blocking calls in async / event-loop paths.
71+
- Memory: unbounded buffers, large allocations, retained references that prevent GC.
72+
- Caching: invalidation correctness, key collisions, stampede protection.
73+
- I/O: missing batching, missing timeouts.
74+
75+
### E. Reliability & Observability
76+
77+
- Logging at appropriate level; no PII or secrets; enough context to debug a production incident.
78+
- Metrics / traces added for new code paths that matter operationally.
79+
- Timeouts, retries with backoff, circuit breakers where remote calls are made.
80+
- Graceful degradation when a dependency is down.
81+
82+
### F. Testing
83+
84+
- New behavior has tests; bug fixes include a regression test that fails before the fix.
85+
- Edge cases covered, not just the happy path.
86+
- Assertions verify behavior, not just "did not throw".
87+
- No flaky patterns: real network, sleeps, time-of-day, machine-specific paths, hidden ordering dependencies.
88+
- Tests are located and named consistently with the project.
89+
90+
### G. Readability & Maintainability
91+
92+
- Functions / modules have a single clear responsibility.
93+
- No dead code, no commented-out blocks, no `TODO` without an owner or ticket.
94+
- Complexity: deeply nested branches, overly long functions, magic numbers.
95+
- Comments explain **why**, not **what** — and stay accurate after the change.
96+
- Naming matches surrounding code.
97+
98+
### H. Documentation
99+
100+
- Public APIs, config flags, environment variables, CLI args are documented where the project documents them.
101+
- README / migration notes / changelog updated when user-facing behavior changes.
102+
- Removed code's docs are also removed.
103+
104+
### I. Project Conventions
105+
106+
- Matches existing patterns in the codebase (idioms, layering, error model).
107+
- Uses the project's existing libraries instead of introducing new ones for the same job.
108+
- Follows rules declared in `CLAUDE.md` / `AGENTS.md` / `CONTRIBUTING.md`.
109+
- Respects existing module boundaries; no surprise cross-module imports.
110+
111+
### J. Repository Hygiene
112+
113+
- No large binaries, build artifacts, or generated files added.
114+
- No accidental submodule pointer changes, lockfile thrash, or `.gitignore` surprises.
115+
- License / copyright headers present where the project requires them.
116+
- No committed secrets (`.env`, credentials, keys).
117+
118+
## Step 4 — Severity
119+
120+
Tag every finding with one of:
121+
122+
- **🔴 Critical (blocking)** — bug, security flaw, data loss, breaking change without justification, missing auth check, broken build.
123+
- **🟠 Major (should fix before merge)** — correctness gap, missing tests for new behavior, significant perf regression, public-API issue.
124+
- **🟡 Minor (nice to fix)** — readability, small perf, naming, missing edge-case test for non-critical path.
125+
- **🟢 Nit (optional)** — taste-level suggestion. Prefix the comment with `nit:`.
126+
127+
## Step 5 — Output Format
128+
129+
Produce the review in exactly this structure. Do not add preamble or explanation outside it.
130+
131+
```
132+
## Verdict: APPROVE | REQUEST_CHANGES | COMMENT
133+
134+
### Summary
135+
<2-4 sentences: what the PR does and overall assessment>
136+
137+
### 🔴 Critical
138+
- `path/to/file.ext:L42` — <what is wrong, why it matters, suggested fix>
139+
140+
### 🟠 Major
141+
- `path/to/file.ext:L15` — <concern and recommendation>
142+
143+
### 🟡 Minor
144+
- `path/to/file.ext:L30` — <improvement>
145+
146+
### 🟢 Nits
147+
- `path/to/file.ext:L7` — nit: <suggestion>
148+
149+
### Tests
150+
<1-2 sentences on test coverage of the diff>
151+
152+
### Checklist
153+
| Area | Status | Notes |
154+
|------|--------|-------|
155+
| A. Correctness | PASS / FAIL / N-A | |
156+
| B. Security | PASS / FAIL / N-A | |
157+
| C. API design | PASS / FAIL / N-A | |
158+
| D. Performance | LOW / MED / HIGH risk | |
159+
| E. Reliability/obs. | PASS / FAIL / N-A | |
160+
| F. Testing | PASS / FAIL / N-A | |
161+
| G. Readability | PASS / FAIL / N-A | |
162+
| H. Documentation | PASS / FAIL / N-A | |
163+
| I. Conventions | PASS / FAIL / N-A | |
164+
| J. Repo hygiene | PASS / FAIL / N-A | |
165+
```
166+
167+
### Verdict Rules
168+
169+
- **APPROVE** — zero critical, no unresolved major issues, applicable checks pass.
170+
- **REQUEST_CHANGES** — any 🔴 critical, or a 🟠 major that blocks the stated intent.
171+
- **COMMENT** — no critical/major blockers, but findings worth discussing before merge.
172+
173+
## Step 6 — Style Rules for Findings
174+
175+
1. **Always cite `file:line`.** Never make a vague claim without a pointer.
176+
2. **Explain WHY.** State the consequence (what breaks, who is affected), not just that something looks off.
177+
3. **Show expected vs. actual** for correctness or consistency issues.
178+
4. **Be actionable.** Each finding should imply a concrete change.
179+
5. **Critique code, not the author.** "This function …" not "You …".
180+
6. **Prefer a question when uncertain.** "Is this intentional under concurrent writes?" beats a wrong assertion.
181+
7. **Acknowledge good changes briefly** when they're notable (one line, end of summary).
182+
8. **Consolidate.** If the same issue repeats N times, comment once and say "and N similar sites".
183+
184+
## Length Constraints
185+
186+
- **Summary**: 2–4 sentences.
187+
- **Each finding body**: under ~150 characters when used as an inline PR comment; up to 2–3 sentences in summary-report mode.
188+
- **Total findings**: at most ~12. If more exist, prioritize Critical → Major → Minor and state the omitted count in the summary.
189+
- **Do NOT repeat the checklist table inline.** It belongs only in the top-level summary.
190+
191+
## Anti-Patterns — Do NOT
192+
193+
- Restate what the diff obviously does.
194+
- Flag issues the project's formatter/linter already enforces.
195+
- Invent findings to seem thorough — if the PR is clean, say so plainly.
196+
- Suggest sweeping refactors outside the PR's scope.
197+
- Block on personal taste; mark those as 🟢 nit.
198+
- Quote large blocks of unchanged code back at the author.
199+
200+
## When the PR Is Clean
201+
202+
Say so directly. A short verdict with `APPROVE`, a one-paragraph summary, and an empty findings list is a perfectly good review.

0 commit comments

Comments
 (0)