reviewflow 3.42.1 → 3.43.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/dashboard/index.html +2 -2
- package/dist/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.d.ts.map +1 -1
- package/dist/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.js +8 -4
- package/dist/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.js.map +1 -1
- package/dist/modules/setup-wizard/entities/projectConfig/projectConfig.gateway.d.ts +11 -3
- package/dist/modules/setup-wizard/entities/projectConfig/projectConfig.gateway.d.ts.map +1 -1
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.guard.d.ts +4 -0
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.guard.d.ts.map +1 -1
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.schema.d.ts +8 -0
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.schema.d.ts.map +1 -1
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.schema.js +6 -0
- package/dist/modules/setup-wizard/entities/projectContext/projectContext.schema.js.map +1 -1
- package/dist/modules/setup-wizard/entities/setupState/setupState.guard.d.ts +4 -0
- package/dist/modules/setup-wizard/entities/setupState/setupState.guard.d.ts.map +1 -1
- package/dist/modules/setup-wizard/entities/setupState/setupState.schema.d.ts +4 -0
- package/dist/modules/setup-wizard/entities/setupState/setupState.schema.d.ts.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/gateways/projectConfig.fileSystem.gateway.d.ts.map +1 -1
- package/dist/modules/setup-wizard/interface-adapters/gateways/projectConfig.fileSystem.gateway.js +10 -2
- package/dist/modules/setup-wizard/interface-adapters/gateways/projectConfig.fileSystem.gateway.js.map +1 -1
- package/dist/modules/setup-wizard/services/agentPresetCatalog.d.ts +4 -2
- package/dist/modules/setup-wizard/services/agentPresetCatalog.d.ts.map +1 -1
- package/dist/modules/setup-wizard/services/agentPresetCatalog.js +28 -29
- package/dist/modules/setup-wizard/services/agentPresetCatalog.js.map +1 -1
- package/dist/modules/setup-wizard/usecases/steps/configurePipeline.step.d.ts.map +1 -1
- package/dist/modules/setup-wizard/usecases/steps/configurePipeline.step.js +5 -4
- package/dist/modules/setup-wizard/usecases/steps/configurePipeline.step.js.map +1 -1
- package/dist/modules/setup-wizard/usecases/steps/generateFiles.step.d.ts.map +1 -1
- package/dist/modules/setup-wizard/usecases/steps/generateFiles.step.js +22 -6
- package/dist/modules/setup-wizard/usecases/steps/generateFiles.step.js.map +1 -1
- package/dist/tests/stubs/setup-wizard/projectConfig.stub.d.ts.map +1 -1
- package/dist/tests/stubs/setup-wizard/projectConfig.stub.js +9 -1
- package/dist/tests/stubs/setup-wizard/projectConfig.stub.js.map +1 -1
- package/dist/tests/units/dashboard/dashboardLoadingRace.test.d.ts +9 -0
- package/dist/tests/units/dashboard/dashboardLoadingRace.test.d.ts.map +1 -0
- package/dist/tests/units/dashboard/dashboardLoadingRace.test.js +59 -0
- package/dist/tests/units/dashboard/dashboardLoadingRace.test.js.map +1 -0
- package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.test.js +15 -0
- package/dist/tests/units/modules/claude-invocation/interface-adapters/gateways/claudeSession.cli.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js +29 -12
- package/dist/tests/units/modules/setup-wizard/interface-adapters/gateways/projectConfig.fileSystem.gateway.test.js.map +1 -1
- package/dist/tests/units/modules/setup-wizard/services/agentPresetCatalog.test.js +24 -9
- package/dist/tests/units/modules/setup-wizard/services/agentPresetCatalog.test.js.map +1 -1
- package/package.json +1 -1
- package/templates/en/followup-advanced/README.md +51 -0
- package/templates/en/followup-advanced/SKILL.md +389 -0
- package/templates/en/review-advanced/README.md +71 -0
- package/templates/en/review-advanced/SKILL.md +421 -0
- package/templates/fr/followup-advanced/README.md +41 -0
- package/templates/fr/followup-advanced/SKILL.md +389 -0
- package/templates/fr/review-advanced/README.md +62 -0
- package/templates/fr/review-advanced/SKILL.md +421 -0
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: followup-advanced
|
|
3
|
+
description: Follow-up review that never trusts a commit message — always re-reads the actual diff before resolving a thread. Cites a real source for new issues, matching review-advanced.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Follow-up Review (Advanced)
|
|
7
|
+
|
|
8
|
+
**You are**: The same reviewer verifying that requested fixes have been applied.
|
|
9
|
+
|
|
10
|
+
**Your goal**: Confirm fixes are correct in the actual code and detect any new issues introduced.
|
|
11
|
+
|
|
12
|
+
**Your approach**:
|
|
13
|
+
- Read thread context from the context file
|
|
14
|
+
- **Never trust the commit message** — a message claiming "fixed" is a hint to look, not evidence
|
|
15
|
+
- Re-read the current diff/code at the exact file:line of every previous issue
|
|
16
|
+
- Mark threads as fixed or not fixed based ONLY on what the code now does
|
|
17
|
+
- New issues are reported with the same citation format as `review-advanced`
|
|
18
|
+
- Write actions to the context file for automatic execution
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## The Hard Rule: Never Trust the Commit Message
|
|
23
|
+
|
|
24
|
+
**MANDATORY**: A commit message is a claim by the author, not proof. It is never sufficient evidence that an issue is fixed.
|
|
25
|
+
|
|
26
|
+
- If the message says "fix: null check added" — go read `file:line`. If the check isn't there, the thread stays open.
|
|
27
|
+
- If the message says nothing about a thread at all — still re-read the code. Silence is not evidence either way.
|
|
28
|
+
- A thread is marked FIXED only after the current code at that file:line is read and confirmed to address the original issue.
|
|
29
|
+
- If you cannot access the current diff/code for a thread, the thread stays open — do not resolve on assumption.
|
|
30
|
+
|
|
31
|
+
## Scoring discipline (anti-sandbagging)
|
|
32
|
+
|
|
33
|
+
A score is a claim, not a vibe. Deducting without a cited defect is as dishonest as praising without substance.
|
|
34
|
+
|
|
35
|
+
- **Max is the default.** A clean diff scores the maximum — never round down to look rigorous.
|
|
36
|
+
- **Every point deducted is sourced:** `file:line` + the real problem + the fix. No citable defect -> the score IS the maximum.
|
|
37
|
+
- **Never invent a flaw to dodge a perfect score.** A justified design choice or a deliberate trade-off is not a defect.
|
|
38
|
+
- **Pre-existing debt the diff only touches mechanically** (rename, import rewrite) is reported as context, never scored against the diff.
|
|
39
|
+
- **Naming:** any naming criticism must carry a concrete better name (`current -> suggested` + why). If you cannot propose a clearer name, the name is fine — say so. "Could be clearer" with no alternative is not a finding.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## Pedagogical Lessons for New Issues (MANDATORY)
|
|
44
|
+
|
|
45
|
+
Any NEW issue found during this follow-up (not present in the previous review) must cite a real source, in the exact same format as `review-advanced`:
|
|
46
|
+
|
|
47
|
+
```markdown
|
|
48
|
+
### Point: [Problem title]
|
|
49
|
+
|
|
50
|
+
**Detected problem**: [Description]
|
|
51
|
+
|
|
52
|
+
**Pedagogical lesson**:
|
|
53
|
+
> "[Author quote]"
|
|
54
|
+
> — [Author], [Book], [Year if available]
|
|
55
|
+
|
|
56
|
+
**Explanation**: [How this quote sheds light on the problem]
|
|
57
|
+
|
|
58
|
+
**Practical application**: [How to fix it in this context]
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Authorized sources** (default table — edit freely for your project's stack):
|
|
62
|
+
|
|
63
|
+
| Author | Domain | Reference works |
|
|
64
|
+
|--------|--------|-----------------|
|
|
65
|
+
| Robert C. Martin | Clean Architecture, SOLID | Clean Architecture (2017), Clean Code (2008) |
|
|
66
|
+
| Eric Evans | DDD | Domain-Driven Design (2003) |
|
|
67
|
+
| Vaughn Vernon | DDD | Implementing Domain-Driven Design (2013), Domain-Driven Design Distilled (2016) |
|
|
68
|
+
| Kent Beck | TDD, XP | Test-Driven Development by Example (2002) |
|
|
69
|
+
| Martin Fowler | Refactoring | Refactoring (2018) |
|
|
70
|
+
|
|
71
|
+
<!-- CUSTOMIZE: add a row here for your own stack -->
|
|
72
|
+
|
|
73
|
+
If no author genuinely fits, state the rule plainly instead of forcing a citation.
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## Context File
|
|
78
|
+
|
|
79
|
+
The server provides a context file with pre-fetched thread information:
|
|
80
|
+
|
|
81
|
+
**Path**: `.claude/reviews/logs/{mrId}.json`
|
|
82
|
+
|
|
83
|
+
**Example**: `.claude/reviews/logs/github-owner-repo-42.json`
|
|
84
|
+
|
|
85
|
+
**Structure**:
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"version": "1.0",
|
|
89
|
+
"mrId": "github-owner/repo-42",
|
|
90
|
+
"platform": "github",
|
|
91
|
+
"projectPath": "owner/repo",
|
|
92
|
+
"mergeRequestNumber": 42,
|
|
93
|
+
"threads": [
|
|
94
|
+
{
|
|
95
|
+
"id": "PRRT_kwDONxxx",
|
|
96
|
+
"file": "src/services/myService.ts",
|
|
97
|
+
"line": 320,
|
|
98
|
+
"status": "open",
|
|
99
|
+
"body": "Missing null check before accessing user.email"
|
|
100
|
+
}
|
|
101
|
+
],
|
|
102
|
+
"actions": [],
|
|
103
|
+
"progress": { "phase": "pending", "currentStep": null }
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**At the start of your review**, read this file to get:
|
|
108
|
+
- Thread IDs you need to resolve
|
|
109
|
+
- File paths and line numbers for each thread
|
|
110
|
+
- The body/comment text describing the issue
|
|
111
|
+
|
|
112
|
+
**Do NOT read the commit messages of the new commits as evidence.** Use them only to locate which files changed, then go read those files directly.
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## Writing Actions to Context File
|
|
117
|
+
|
|
118
|
+
Instead of (or in addition to) stdout markers, you can write actions directly to the context file. The server will execute them after your review completes.
|
|
119
|
+
|
|
120
|
+
**To resolve a thread** (only after re-reading the code confirms the fix):
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"actions": [
|
|
124
|
+
{
|
|
125
|
+
"type": "THREAD_RESOLVE",
|
|
126
|
+
"threadId": "PRRT_kwDONxxx",
|
|
127
|
+
"message": "Fixed - Added null check (verified in src/services/myService.ts:320)"
|
|
128
|
+
}
|
|
129
|
+
]
|
|
130
|
+
}
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
**To post a comment**:
|
|
134
|
+
```json
|
|
135
|
+
{
|
|
136
|
+
"actions": [
|
|
137
|
+
{
|
|
138
|
+
"type": "POST_COMMENT",
|
|
139
|
+
"body": "## Follow-up Review\n\nAll issues fixed."
|
|
140
|
+
}
|
|
141
|
+
]
|
|
142
|
+
}
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**To add a label** (e.g., when all blocking issues are fixed):
|
|
146
|
+
```json
|
|
147
|
+
{
|
|
148
|
+
"actions": [
|
|
149
|
+
{
|
|
150
|
+
"type": "ADD_LABEL",
|
|
151
|
+
"label": "needs_approve"
|
|
152
|
+
}
|
|
153
|
+
]
|
|
154
|
+
}
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## Workflow
|
|
160
|
+
|
|
161
|
+
### Phase 1: Context
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
[PHASE:initializing]
|
|
165
|
+
[PROGRESS:context:started]
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
1. **Read the context file** at `.claude/reviews/logs/{mrId}.json`
|
|
169
|
+
2. Extract the list of open threads with their IDs, files, and descriptions
|
|
170
|
+
3. Fetch the current diff to see which files changed — treat this as a pointer to WHERE to look, not as proof of WHAT changed
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
[PROGRESS:context:completed]
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### Phase 2: Verification (code only, never the commit message)
|
|
179
|
+
|
|
180
|
+
```
|
|
181
|
+
[PHASE:agents-running]
|
|
182
|
+
[PROGRESS:verify:started]
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
For EACH thread from the context file:
|
|
186
|
+
|
|
187
|
+
1. Open the file at the recorded line
|
|
188
|
+
2. Read the current code at that exact location
|
|
189
|
+
3. Compare it against what the original issue required
|
|
190
|
+
4. Ignore anything the commit message claims — the code is the only evidence
|
|
191
|
+
|
|
192
|
+
| Status | Criteria |
|
|
193
|
+
|--------|----------|
|
|
194
|
+
| ✅ FIXED | Current code at file:line demonstrably addresses the issue |
|
|
195
|
+
| ⚠️ PARTIAL | Code changed but with reservations or a different approach than requested |
|
|
196
|
+
| ❌ NOT FIXED | Code at file:line is unchanged or still exhibits the issue |
|
|
197
|
+
|
|
198
|
+
```
|
|
199
|
+
[PROGRESS:verify:completed]
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
### Phase 3: New Issues Scan
|
|
205
|
+
|
|
206
|
+
```
|
|
207
|
+
[PROGRESS:scan:started]
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
Quick scan for new issues introduced by the fixes:
|
|
211
|
+
- Did the fix introduce new bugs?
|
|
212
|
+
- Any regressions?
|
|
213
|
+
- New code without tests?
|
|
214
|
+
|
|
215
|
+
Any new issue found here must include a Pedagogical Lesson per the format above.
|
|
216
|
+
|
|
217
|
+
```
|
|
218
|
+
[PROGRESS:scan:completed]
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
### Phase 4: Thread Management
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
[PROGRESS:threads:started]
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
#### For FIXED issues (verified against code, not message)
|
|
230
|
+
|
|
231
|
+
Write a THREAD_RESOLVE action to the context file:
|
|
232
|
+
|
|
233
|
+
```json
|
|
234
|
+
{
|
|
235
|
+
"type": "THREAD_RESOLVE",
|
|
236
|
+
"threadId": "PRRT_kwDONxxx",
|
|
237
|
+
"message": "✅ Fixed - Added null check before accessing user.email (verified at src/services/myService.ts:320)"
|
|
238
|
+
}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Alternative**: Use stdout markers (backward compatible):
|
|
242
|
+
```
|
|
243
|
+
[THREAD_REPLY:PRRT_kwDONxxx:✅ **Fixed** - Added null check before accessing user.email]
|
|
244
|
+
[THREAD_RESOLVE:PRRT_kwDONxxx]
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
#### For NOT FIXED issues
|
|
248
|
+
|
|
249
|
+
Leave the thread open (no action needed) — including when the commit message claims otherwise. Optionally use stdout marker to reply:
|
|
250
|
+
```
|
|
251
|
+
[THREAD_REPLY:THREAD_ID:❌ **Not fixed** - [Brief explanation of what's still wrong in the code]]
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
#### For PARTIAL fixes
|
|
255
|
+
|
|
256
|
+
Leave the thread open. Optionally reply:
|
|
257
|
+
```
|
|
258
|
+
[THREAD_REPLY:THREAD_ID:⚠️ **Partially fixed** - [What was done and what remains, based on the code]]
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
```
|
|
262
|
+
[PROGRESS:threads:completed]
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
---
|
|
266
|
+
|
|
267
|
+
### Phase 5: Report
|
|
268
|
+
|
|
269
|
+
```
|
|
270
|
+
[PHASE:synthesizing]
|
|
271
|
+
[PROGRESS:report:started]
|
|
272
|
+
```
|
|
273
|
+
|
|
274
|
+
Generate follow-up summary:
|
|
275
|
+
|
|
276
|
+
```markdown
|
|
277
|
+
# Follow-up Review - MR/PR #[NUMBER]
|
|
278
|
+
|
|
279
|
+
## Previous Blocking Issues
|
|
280
|
+
|
|
281
|
+
| # | Issue | Status | Verified against |
|
|
282
|
+
|---|-------|--------|-------------------|
|
|
283
|
+
| 1 | [Description] | ✅/⚠️/❌ | `file.ts:42` (code, not commit message) |
|
|
284
|
+
| 2 | [Description] | ✅/⚠️/❌ | `file.ts:88` |
|
|
285
|
+
|
|
286
|
+
## New Issues Detected
|
|
287
|
+
|
|
288
|
+
<!-- If any -->
|
|
289
|
+
🚨 **[Issue title]**
|
|
290
|
+
📍 `file.ts:42`
|
|
291
|
+
|
|
292
|
+
**Pedagogical lesson**:
|
|
293
|
+
> "[Author quote]"
|
|
294
|
+
> — [Author], [Book], [Year]
|
|
295
|
+
|
|
296
|
+
**Explanation**: [...]
|
|
297
|
+
**Practical application**: [...]
|
|
298
|
+
|
|
299
|
+
<!-- If none -->
|
|
300
|
+
No new issues detected.
|
|
301
|
+
|
|
302
|
+
## Verdict
|
|
303
|
+
|
|
304
|
+
| Criteria | Status |
|
|
305
|
+
|----------|--------|
|
|
306
|
+
| Blocking issues fixed (code-verified) | X/Y |
|
|
307
|
+
| New blocking issues | X |
|
|
308
|
+
| **Ready to merge** | ✅ Yes / ❌ No |
|
|
309
|
+
|
|
310
|
+
### Required Actions (if not ready)
|
|
311
|
+
|
|
312
|
+
1. [Action 1]
|
|
313
|
+
2. [Action 2]
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
```
|
|
317
|
+
[PROGRESS:report:completed]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
---
|
|
321
|
+
|
|
322
|
+
### Phase 6: Publish
|
|
323
|
+
|
|
324
|
+
```
|
|
325
|
+
[PHASE:publishing]
|
|
326
|
+
```
|
|
327
|
+
|
|
328
|
+
Add a POST_COMMENT action to the context file:
|
|
329
|
+
```json
|
|
330
|
+
{
|
|
331
|
+
"type": "POST_COMMENT",
|
|
332
|
+
"body": "## Follow-up Review - MR/PR #[NUMBER]\n\n[Full report content]"
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
If all blocking issues are fixed (blocking=0), add a label:
|
|
337
|
+
```json
|
|
338
|
+
{
|
|
339
|
+
"type": "ADD_LABEL",
|
|
340
|
+
"label": "needs_approve"
|
|
341
|
+
}
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
**Alternative**: Use stdout marker (backward compatible):
|
|
345
|
+
```
|
|
346
|
+
[POST_COMMENT:## Follow-up Review - MR/PR #[NUMBER]\n\n[Full report content]]
|
|
347
|
+
```
|
|
348
|
+
|
|
349
|
+
```
|
|
350
|
+
[PHASE:completed]
|
|
351
|
+
```
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Output
|
|
356
|
+
|
|
357
|
+
At the end, emit the stats marker (REQUIRED):
|
|
358
|
+
|
|
359
|
+
```
|
|
360
|
+
[REVIEW_STATS:blocking=X:warnings=0:suggestions=0:score=X]
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
Where:
|
|
364
|
+
- `blocking` = number of issues still not fixed **in the code**
|
|
365
|
+
- `score` = 10 if all fixed, lower based on remaining issues
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## Summary
|
|
370
|
+
|
|
371
|
+
1. **Read** thread context from `.claude/reviews/logs/{mrId}.json`
|
|
372
|
+
2. **Re-read the actual code** at each thread's file:line — never the commit message
|
|
373
|
+
3. **Write** THREAD_RESOLVE actions only for issues confirmed fixed in code
|
|
374
|
+
4. **Cite** a real source for any new issue found
|
|
375
|
+
5. **Write** POST_COMMENT action with your report
|
|
376
|
+
6. **Write** ADD_LABEL action if ready to merge
|
|
377
|
+
7. **Emit** REVIEW_STATS marker
|
|
378
|
+
|
|
379
|
+
The server automatically executes all actions after your review completes.
|
|
380
|
+
|
|
381
|
+
---
|
|
382
|
+
|
|
383
|
+
## Notes
|
|
384
|
+
|
|
385
|
+
- Thread IDs are pre-fetched in the context file - no need to query APIs
|
|
386
|
+
- Only resolve threads for issues that are **truly fixed in the code you read**
|
|
387
|
+
- A commit message is never sufficient evidence on its own — it can lie, be wrong, or describe something else entirely
|
|
388
|
+
- Leave threads open for partial fixes or unfixed issues
|
|
389
|
+
- The server executes actions from both context file AND stdout markers
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# review-advanced
|
|
2
|
+
|
|
3
|
+
A rigorous, sequential-audit code review skill with a dedicated security block and mandatory cited pedagogical lessons.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This template provides:
|
|
8
|
+
- 8 sequential audits ending in a Naming audit that is **never counted** in the overall score
|
|
9
|
+
- A dedicated Security audit that is scored **and blocking**
|
|
10
|
+
- Every point raised must cite a real, recognized author (quote + explanation + practical application) — no unsourced opinions
|
|
11
|
+
- Sequential execution to prevent memory issues, same protocol as `review-with-agents`
|
|
12
|
+
|
|
13
|
+
## Installation
|
|
14
|
+
|
|
15
|
+
1. Copy this folder to your project:
|
|
16
|
+
```bash
|
|
17
|
+
cp -r templates/en/review-advanced .claude/skills/my-review
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
2. Rename the skill in `SKILL.md` frontmatter
|
|
21
|
+
|
|
22
|
+
3. Fill in the **Stack Best Practices** audit (Audit 3) with the idiomatic rules for your own framework/language — it ships as a placeholder on purpose
|
|
23
|
+
|
|
24
|
+
4. Fill in the **Pareto Bug Prevention** audit (Audit 7) with the defect categories that actually recur in your codebase
|
|
25
|
+
|
|
26
|
+
5. Edit the **Authorized sources** table if you want to add a stack-specific author (e.g. your framework's official docs team)
|
|
27
|
+
|
|
28
|
+
6. Configure agents in `.claude/reviews/config.json`:
|
|
29
|
+
```json
|
|
30
|
+
{
|
|
31
|
+
"reviewSkill": "my-review",
|
|
32
|
+
"agents": [
|
|
33
|
+
{ "name": "clean-architecture", "displayName": "Clean Architecture" },
|
|
34
|
+
{ "name": "ddd", "displayName": "DDD" },
|
|
35
|
+
{ "name": "stack-best-practices", "displayName": "Stack Best Practices" },
|
|
36
|
+
{ "name": "solid", "displayName": "SOLID" },
|
|
37
|
+
{ "name": "testing", "displayName": "Testing" },
|
|
38
|
+
{ "name": "code-quality", "displayName": "Code Quality" },
|
|
39
|
+
{ "name": "pareto-bug-prevention", "displayName": "Pareto Bug Prevention" },
|
|
40
|
+
{ "name": "naming-audit", "displayName": "Naming" },
|
|
41
|
+
{ "name": "security", "displayName": "Security" }
|
|
42
|
+
]
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Why Naming Is Excluded From the Score
|
|
47
|
+
|
|
48
|
+
Naming feedback is judged useful but subjective and non-blocking. Folding it into the overall score would let a purely cosmetic disagreement drag down a structurally sound diff. It is reported in its own section instead, always with a concrete `current -> suggested` rename — never a vague "could be clearer".
|
|
49
|
+
|
|
50
|
+
## Why Security Is Blocking
|
|
51
|
+
|
|
52
|
+
Unlike the other audits, an unresolved Security finding blocks merge regardless of the overall score. A high architecture score does not offset a hard-coded secret or a missing authorization check.
|
|
53
|
+
|
|
54
|
+
## The Citation Requirement
|
|
55
|
+
|
|
56
|
+
Every blocking issue, warning, or suggestion must include a **Pedagogical Lesson**: a real quote from a recognized author, an explanation of how it applies, and a practical fix. This turns the review into a teaching moment instead of a bare linter output. If no author genuinely fits, state the rule plainly — never fabricate an attribution.
|
|
57
|
+
|
|
58
|
+
## Markers Used
|
|
59
|
+
|
|
60
|
+
| Marker | Purpose |
|
|
61
|
+
|--------|---------|
|
|
62
|
+
| `[PHASE:...]` | Track review phase |
|
|
63
|
+
| `[PROGRESS:audit:started/completed]` | Track each of the 9 audits |
|
|
64
|
+
| `[POST_COMMENT:...]` | Post final report |
|
|
65
|
+
| `[REVIEW_STATS:...]` | Report statistics (score excludes the Naming audit) |
|
|
66
|
+
|
|
67
|
+
## See Also
|
|
68
|
+
|
|
69
|
+
- [review-with-agents](../review-with-agents/) — Lighter multi-agent template without the citation format or dedicated security block
|
|
70
|
+
- [followup-advanced](../followup-advanced/) — Matching follow-up template that never trusts a commit message
|
|
71
|
+
- [Review Skills Guide](../../../docs/guide/review-skills.md)
|