@nano-step/skill-manager 5.6.1 → 5.7.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.
Files changed (39) hide show
  1. package/dist/utils.d.ts +1 -1
  2. package/dist/utils.js +1 -1
  3. package/package.json +1 -1
  4. package/private-catalog.json +7 -2
  5. package/skills/deep-design/SKILL.md +402 -0
  6. package/skills/deep-design/evals/evals.json +23 -0
  7. package/skills/deep-design/skill.json +7 -0
  8. package/skills/feature-analysis/SKILL.md +290 -0
  9. package/skills/feature-analysis/skill.json +15 -0
  10. package/skills/nano-brain/skill.json +7 -0
  11. package/skills/pr-code-reviewer/CHANGELOG.md +329 -0
  12. package/skills/pr-code-reviewer/RESEARCH.md +60 -0
  13. package/skills/pr-code-reviewer/SKILL.md +537 -0
  14. package/skills/pr-code-reviewer/assets/config.json +60 -0
  15. package/skills/pr-code-reviewer/checklists/backend-express.md +357 -0
  16. package/skills/pr-code-reviewer/checklists/ci-cd.md +428 -0
  17. package/skills/pr-code-reviewer/checklists/consumer-search-matrix.md +339 -0
  18. package/skills/pr-code-reviewer/checklists/database.md +382 -0
  19. package/skills/pr-code-reviewer/checklists/frontend-vue-nuxt.md +426 -0
  20. package/skills/pr-code-reviewer/checklists/review-checklist.md +149 -0
  21. package/skills/pr-code-reviewer/references/checkpoint-system.md +58 -0
  22. package/skills/pr-code-reviewer/references/confidence-scoring.md +98 -0
  23. package/skills/pr-code-reviewer/references/framework-rules/express.md +39 -0
  24. package/skills/pr-code-reviewer/references/framework-rules/nestjs.md +41 -0
  25. package/skills/pr-code-reviewer/references/framework-rules/nextjs.md +58 -0
  26. package/skills/pr-code-reviewer/references/framework-rules/prisma.md +54 -0
  27. package/skills/pr-code-reviewer/references/framework-rules/react.md +61 -0
  28. package/skills/pr-code-reviewer/references/framework-rules/typeorm.md +52 -0
  29. package/skills/pr-code-reviewer/references/framework-rules/typescript.md +50 -0
  30. package/skills/pr-code-reviewer/references/framework-rules/vue-nuxt.md +53 -0
  31. package/skills/pr-code-reviewer/references/nano-brain-integration.md +46 -0
  32. package/skills/pr-code-reviewer/references/performance-patterns.md +26 -0
  33. package/skills/pr-code-reviewer/references/quality-patterns.md +25 -0
  34. package/skills/pr-code-reviewer/references/report-template.md +172 -0
  35. package/skills/pr-code-reviewer/references/security-patterns.md +31 -0
  36. package/skills/pr-code-reviewer/references/setup-wizard.md +207 -0
  37. package/skills/pr-code-reviewer/references/subagent-prompts.md +344 -0
  38. package/skills/pr-code-reviewer/references/verification-protocol.md +56 -0
  39. package/skills/pr-code-reviewer/skill.json +15 -0
@@ -0,0 +1,344 @@
1
+ # Subagent Prompt Templates
2
+
3
+ Launch ALL 4 subagents simultaneously with `run_in_background: true`.
4
+
5
+ **IMPORTANT**: Include the PR Summary in each subagent's context so they understand the overall change.
6
+
7
+ **IMPORTANT**: Include `$FRAMEWORK_RULES` (resolved in Phase -2 from `.opencode/code-reviewer.json` stack config) in each subagent prompt. This contains ONLY the framework rules relevant to this project's stack — not all framework rules.
8
+
9
+ **IMPORTANT**: If project memory results were gathered in Phase 1, include them as a `## NANO-BRAIN MEMORY` section in each subagent's prompt.
10
+
11
+ **IMPORTANT**: Include `$REVIEW_DIR` (the temp clone path from Phase 0) in each subagent's prompt. All file reads, grep searches, and LSP operations MUST target this path — NOT the original workspace repo. This ensures subagents see the actual PR branch code.
12
+
13
+ **IMPORTANT**: If Phase 2 produced cross-repo tracing results or a Premise Check (for DELETION changes), include them as `## CROSS-REPO TRACING` and `## PREMISE CHECK` sections in each subagent's prompt.
14
+
15
+ ```
16
+ ## REVIEW DIRECTORY
17
+ All file reads and searches MUST use this path (temp clone of PR branch):
18
+ ${REVIEW_DIR}
19
+ Do NOT read from the original workspace repo — it may be on a different branch.
20
+ ```
21
+
22
+ ## Filtering Rules (Include in ALL subagent prompts)
23
+
24
+ Every subagent MUST apply these rules before returning findings:
25
+
26
+ ```
27
+ ## FILTERING RULES (MANDATORY)
28
+ - ONLY report findings that would make a senior engineer stop and think
29
+ - SKIP anything a linter/formatter would catch (let tools handle those)
30
+ - SKIP style nits that don't affect readability or correctness
31
+ - SKIP obvious comments like "add JSDoc to this function" unless it's a public API
32
+ - For each finding, ask: "Would I block a PR for this?" If no → downgrade or drop
33
+ - Severity guide:
34
+ - critical: Blocks merge. Security hole, data loss, crash, logic bug
35
+ - warning: Should fix before merge. Edge case, missing validation, race condition
36
+ - improvement: Code works but can be better. Cleaner, faster, more idiomatic
37
+ - suggestion: Nice-to-have. Won't block, won't even flag strongly
38
+
39
+ ## EVIDENCE REQUIREMENT (MANDATORY for critical/warning)
40
+ - Every finding with severity `critical` or `warning` MUST include an `evidence` field
41
+ - Evidence MUST cite specific file paths and line numbers you actually read
42
+ - Findings with severity `critical` or `warning` that lack evidence will be AUTO-DOWNGRADED to `suggestion` by the orchestrator
43
+ - `improvement` and `suggestion` findings do NOT require evidence (field can be empty)
44
+
45
+ ## VERIFICATION PROTOCOL (MANDATORY for critical/warning)
46
+
47
+ Before reporting any finding with severity `critical` or `warning`, complete these 4 steps:
48
+
49
+ ### Step 1: IDENTIFY
50
+ What looks wrong? State the specific concern.
51
+
52
+ ### Step 2: TRACE
53
+ Read the surrounding context beyond the changed file. For each concern type:
54
+ - **Error handling**: Trace the throw/error path UP to the HTTP boundary (controller/route handler). Check for try-catch at EVERY layer between the throw and the controller.
55
+ - **Null safety**: Trace the data DOWN to its source (SQL query, API contract, constructor). Check if the source guarantees non-null (e.g., DB primary key, NOT NULL column, JOIN constraint). Verify basic language semantics (e.g., `Array.isArray(null)` returns `false` — no TypeError; `Boolean(undefined)` returns `false`).
56
+ - **Framework patterns**: Check if the specific usage context makes the pattern safe (e.g., Pinia singleton backing a composable, client-only component, intentionally non-reactive value).
57
+ - **Logic errors**: Construct a CONCRETE triggering scenario with specific input values that would cause the bug.
58
+ - **Redundant/unnecessary code**: Find ALL callers of the function before judging its internals. A function called from multiple paths with different inputs may need logic that looks redundant from one caller's perspective but is necessary for another.
59
+
60
+ ### Step 3: VERIFY
61
+ Can you PROVE this is a real problem? You need ONE of:
62
+ - A concrete execution path that reaches the bug (with specific inputs)
63
+ - A missing handler at the HTTP boundary (cite the controller file:line where the catch SHOULD be but ISN'T)
64
+ - A data source that can actually produce the problematic value (cite the query/API that returns nullable data)
65
+
66
+ If you cannot construct concrete proof after tracing → DROP the finding silently.
67
+
68
+ ### Step 4: DECIDE
69
+ - **Verified** → Report with `evidence` field containing your proof (file:line references)
70
+ - **Unverifiable** (too many layers, external system) → Report as `suggestion` with `evidence: "unverified: {reason}"`
71
+ - **Disproven** (e.g., try-catch exists at boundary, data source is non-null) → DROP silently. Do NOT report.
72
+
73
+ ## EVIDENCE EXAMPLES
74
+
75
+ GOOD evidence (concrete, traceable):
76
+ - "Throw at `openSearchService.js:870` propagates through `insightService.js:939` (no catch) → `metaService.js:158` (no catch) → controller `meta.js:28` has NO try-catch. Error reaches HTTP boundary unhandled."
77
+ - "`.id` comes from `fetchItemMetaImages` SQL query at `metaRepo.js:332` using LEFT JOIN — `imiu.item_id` can be NULL when no image row exists."
78
+ - "AbortController is non-reactive by design — backed by Pinia singleton store at `useTradeSimilarItemsStore.js:3`, composable creates one closure per component lifecycle."
79
+
80
+ BAD evidence (will be auto-downgraded by orchestrator):
81
+ - "This could throw an error" (no trace to boundary)
82
+ - "This might be null" (no trace to data source)
83
+ - "This violates best practices" (no concrete impact)
84
+ - "Missing error handling" (didn't check if caller handles it)
85
+ ```
86
+
87
+ ## Subagent 1: EXPLORE — Code Quality & Patterns
88
+
89
+ ```javascript
90
+ delegate_task({
91
+ subagent_type: "explore",
92
+ load_skills: [],
93
+ run_in_background: true,
94
+ prompt: `
95
+ ## REVIEW DIRECTORY
96
+ All file reads and searches MUST use this path (temp clone of PR branch):
97
+ ${REVIEW_DIR}
98
+ Do NOT read from the original workspace repo — it may be on a different branch.
99
+
100
+ ## PR SUMMARY
101
+ ${prSummary}
102
+
103
+ ## CHANGED FILES
104
+ ${changedFilesWithDiff}
105
+
106
+ ## TRACED DEPENDENCIES
107
+ ${tracedDependencies}
108
+
109
+ ## AGENTS.MD CONTEXT (workspace domain map + repo relationships)
110
+ ${agentsContext || "No AGENTS.md found in workspace root"}
111
+
112
+ ## NANO-BRAIN MEMORY (past sessions, reviews, decisions)
113
+ ${projectMemory || "No nano-brain memory available for this workspace"}
114
+
115
+ ## LINEAR TICKET CONTEXT (from linked Linear ticket)
116
+ ${linearTicketContext || "No Linear ticket linked to this PR"}
117
+
118
+ ## CROSS-REPO TRACING (from Phase 2 — backend data flow analysis)
119
+ ${crossRepoTracing || "No cross-repo tracing performed"}
120
+
121
+ ## PREMISE CHECK (for DELETION changes — why the code existed)
122
+ ${premiseCheck || "Not a DELETION change — no premise check needed"}
123
+
124
+ ## FRAMEWORK RULES (project-specific — from stack config)
125
+ ${frameworkRules || "No framework rules configured — run /review --setup to configure"}
126
+
127
+ ${FILTERING_RULES}
128
+
129
+ ## TASK
130
+ Analyze code quality, patterns, and improvement opportunities
131
+
132
+ ## CHECK
133
+ 1. Error handling patterns — missing catches, swallowed errors, generic catches
134
+ 2. Type safety — any casts, missing null checks, unsafe assertions
135
+ 3. Code duplication — repeated logic that should be extracted
136
+ 4. Complexity — deep nesting, long functions, god objects
137
+ 5. **Code improvements** — cleaner alternatives, better abstractions, simpler logic
138
+ 6. **Dead code from deletions** — if code was removed, check if related code (exports, i18n keys, config) is now orphaned
139
+
140
+ DO NOT report: naming nits, formatting, import order, missing comments on obvious code
141
+
142
+ ## RETURN FORMAT
143
+ JSON: {findings: [{file, line, severity, category, message, suggestion, code_suggestion?, evidence, confidence, trace_path?}]}
144
+ severity: "critical" | "warning" | "improvement" | "suggestion"
145
+ evidence: REQUIRED for critical/warning — concrete proof with file:line references. Empty string for improvement/suggestion.
146
+ confidence: "high" (traced 2+ layers, concrete proof) | "medium" (traced 1 layer) | "low" (pattern-based, no trace)
147
+ trace_path: Optional array of "file:line" strings showing the verification trace (e.g., ["service.js:870", "controller.js:28"])
148
+ `
149
+ });
150
+ ```
151
+
152
+ ## Subagent 2: ORACLE — Security & Logic
153
+
154
+ ```javascript
155
+ delegate_task({
156
+ subagent_type: "oracle",
157
+ load_skills: [],
158
+ run_in_background: true,
159
+ prompt: `
160
+ ## REVIEW DIRECTORY
161
+ All file reads and searches MUST use this path (temp clone of PR branch):
162
+ ${REVIEW_DIR}
163
+ Do NOT read from the original workspace repo — it may be on a different branch.
164
+
165
+ ## PR SUMMARY
166
+ ${prSummary}
167
+
168
+ ## CHANGED FILES
169
+ ${changedFilesWithDiff}
170
+
171
+ ## TRACED DEPENDENCIES
172
+ ${tracedDependencies}
173
+
174
+ ## NANO-BRAIN MEMORY (past sessions, reviews, decisions)
175
+ ${projectMemory || "No nano-brain memory available for this workspace"}
176
+
177
+ ## LINEAR TICKET CONTEXT (from linked Linear ticket)
178
+ ${linearTicketContext || "No Linear ticket linked to this PR"}
179
+
180
+ ## CROSS-REPO TRACING (from Phase 2 — backend data flow analysis)
181
+ ${crossRepoTracing || "No cross-repo tracing performed"}
182
+
183
+ ## PREMISE CHECK (for DELETION changes — why the code existed)
184
+ ${premiseCheck || "Not a DELETION change — no premise check needed"}
185
+
186
+ ## FRAMEWORK RULES (project-specific — from stack config)
187
+ ${frameworkRules || "No framework rules configured — run /review --setup to configure"}
188
+
189
+ ${FILTERING_RULES}
190
+
191
+ ## TASK
192
+ Deep security, logic analysis, and logic improvement opportunities
193
+
194
+ ## CHECK
195
+ 1. OWASP Top 10 vulnerabilities
196
+ 2. Logic correctness (especially for LOGIC-type changes)
197
+ 3. Edge cases and boundary conditions
198
+ 4. Race conditions and state management
199
+ 5. Input validation gaps
200
+ 6. Authentication/authorization holes
201
+ 7. **Logic improvements** — simpler conditionals, better error paths, clearer state machines
202
+ 8. **Ticket alignment** — do the code changes match the acceptance criteria from the Linear ticket?
203
+ 9. **Cross-repo data consistency** — if the code consumes API data, do frontend assumptions match backend behavior? Are there hardcoded values that should come from backend config?
204
+ 10. **Deletion premise validation** — if code was deleted: Was the code there for a valid reason? Is removal the right fix, or should the logic be corrected instead? Does the deletion hide a problem rather than solve it?
205
+
206
+ CRITICAL: For any if-else or conditional changes, trace ALL code paths affected.
207
+ CRITICAL: For DELETION changes, you MUST evaluate whether removal is correct or whether the code should be FIXED instead. Challenge the PR's premise — don't assume deletion is the right approach.
208
+ CRITICAL: For any data consumed from an API, verify the frontend's interpretation matches the backend's actual behavior. Flag hardcoded values that correspond to backend config.
209
+
210
+ DO NOT report: theoretical vulnerabilities with no realistic attack vector in this context
211
+
212
+ ## RETURN FORMAT
213
+ JSON: {findings: [{file, line, severity, category, message, suggestion, code_suggestion?, evidence, confidence, trace_path?}]}
214
+ severity: "critical" | "warning" | "improvement" | "suggestion"
215
+ evidence: REQUIRED for critical/warning — concrete proof with file:line references. Empty string for improvement/suggestion.
216
+ confidence: "high" (traced 2+ layers, concrete proof) | "medium" (traced 1 layer) | "low" (pattern-based, no trace)
217
+ trace_path: Optional array of "file:line" strings showing the verification trace (e.g., ["service.js:870", "controller.js:28"])
218
+ `
219
+ });
220
+ ```
221
+
222
+ ## Subagent 3: LIBRARIAN — Documentation & Best Practices
223
+
224
+ ```javascript
225
+ delegate_task({
226
+ subagent_type: "librarian",
227
+ load_skills: [],
228
+ run_in_background: true,
229
+ prompt: `
230
+ ## REVIEW DIRECTORY
231
+ All file reads and searches MUST use this path (temp clone of PR branch):
232
+ ${REVIEW_DIR}
233
+ Do NOT read from the original workspace repo — it may be on a different branch.
234
+
235
+ ## PR SUMMARY
236
+ ${prSummary}
237
+
238
+ ## CHANGED FILES
239
+ ${changedFilesWithDiff}
240
+
241
+ ## TRACED DEPENDENCIES
242
+ ${tracedDependencies}
243
+
244
+ ## NANO-BRAIN MEMORY (past sessions, reviews, decisions)
245
+ ${projectMemory || "No nano-brain memory available for this workspace"}
246
+
247
+ ## LINEAR TICKET CONTEXT (from linked Linear ticket)
248
+ ${linearTicketContext || "No Linear ticket linked to this PR"}
249
+
250
+ ## CROSS-REPO TRACING (from Phase 2 — backend data flow analysis)
251
+ ${crossRepoTracing || "No cross-repo tracing performed"}
252
+
253
+ ## PREMISE CHECK (for DELETION changes — why the code existed)
254
+ ${premiseCheck || "Not a DELETION change — no premise check needed"}
255
+
256
+ ## FRAMEWORK RULES (project-specific — from stack config)
257
+ ${frameworkRules || "No framework rules configured — run /review --setup to configure"}
258
+
259
+ ${FILTERING_RULES}
260
+
261
+ ## TASK
262
+ Best practices review and idiomatic improvement opportunities
263
+
264
+ ## CHECK
265
+ 1. Framework anti-patterns (check ## FRAMEWORK RULES above for project-specific patterns)
266
+ 2. Library misuse — using APIs incorrectly or suboptimally
267
+ 3. **Idiomatic improvements** — more idiomatic usage of language/framework features
268
+ 4. Missing docs ONLY on public APIs or complex algorithms
269
+ 5. **Orphaned resources** — if code was deleted, check for orphaned i18n keys, unused imports, dead CSS classes, abandoned config entries
270
+
271
+ DO NOT report: missing JSDoc on internal functions, obvious code, or private helpers
272
+
273
+ ## RETURN FORMAT
274
+ JSON: {findings: [{file, line, severity, category, message, suggestion, code_suggestion?, evidence, confidence, trace_path?}]}
275
+ severity: "critical" | "warning" | "improvement" | "suggestion"
276
+ evidence: REQUIRED for critical/warning — concrete proof with file:line references. Empty string for improvement/suggestion.
277
+ confidence: "high" (traced 2+ layers, concrete proof) | "medium" (traced 1 layer) | "low" (pattern-based, no trace)
278
+ trace_path: Optional array of "file:line" strings showing the verification trace (e.g., ["service.js:870", "controller.js:28"])
279
+ `
280
+ });
281
+ ```
282
+
283
+ ## Subagent 4: GENERAL — Tests & Integration
284
+
285
+ ```javascript
286
+ delegate_task({
287
+ subagent_type: "general",
288
+ load_skills: [],
289
+ run_in_background: true,
290
+ prompt: `
291
+ ## REVIEW DIRECTORY
292
+ All file reads and searches MUST use this path (temp clone of PR branch):
293
+ ${REVIEW_DIR}
294
+ Do NOT read from the original workspace repo — it may be on a different branch.
295
+
296
+ ## PR SUMMARY
297
+ ${prSummary}
298
+
299
+ ## CHANGED FILES
300
+ ${changedFilesWithDiff}
301
+
302
+ ## TRACED TEST FILES
303
+ ${tracedTestFiles}
304
+
305
+ ## NANO-BRAIN MEMORY (past sessions, reviews, decisions)
306
+ ${projectMemory || "No nano-brain memory available for this workspace"}
307
+
308
+ ## LINEAR TICKET CONTEXT (from linked Linear ticket)
309
+ ${linearTicketContext || "No Linear ticket linked to this PR"}
310
+
311
+ ## CROSS-REPO TRACING (from Phase 2 — backend data flow analysis)
312
+ ${crossRepoTracing || "No cross-repo tracing performed"}
313
+
314
+ ## PREMISE CHECK (for DELETION changes — why the code existed)
315
+ ${premiseCheck || "Not a DELETION change — no premise check needed"}
316
+
317
+ ## FRAMEWORK RULES (project-specific — from stack config)
318
+ ${frameworkRules || "No framework rules configured — run /review --setup to configure"}
319
+
320
+ ${FILTERING_RULES}
321
+
322
+ ## TASK
323
+ Test coverage, integration analysis, and performance improvement opportunities
324
+
325
+ ## CHECK
326
+ 1. Untested critical code paths (logic branches, error handlers)
327
+ 2. Edge cases not covered by tests
328
+ 3. Broken contracts — do changes break existing integrations?
329
+ 4. **Performance improvements** — unnecessary allocations, N+1 queries, missing caching
330
+ 5. Historical regressions — have similar changes caused issues before?
331
+ 6. **Acceptance criteria coverage** — are all acceptance criteria from the ticket addressed by code + tests?
332
+ 7. **Cross-repo contract integrity** — if frontend code was changed/deleted, does it break assumptions the backend relies on? Does the backend expect the frontend to display certain data?
333
+
334
+ DO NOT report: missing tests for trivial getters/setters, style-only changes, or config files
335
+
336
+ ## RETURN FORMAT
337
+ JSON: {findings: [{file, line, severity, category, message, suggestion, code_suggestion?, evidence, confidence, trace_path?}]}
338
+ severity: "critical" | "warning" | "improvement" | "suggestion"
339
+ evidence: REQUIRED for critical/warning — concrete proof with file:line references. Empty string for improvement/suggestion.
340
+ confidence: "high" (traced 2+ layers, concrete proof) | "medium" (traced 1 layer) | "low" (pattern-based, no trace)
341
+ trace_path: Optional array of "file:line" strings showing the verification trace (e.g., ["service.js:870", "controller.js:28"])
342
+ `
343
+ });
344
+ ```
@@ -0,0 +1,56 @@
1
+ # Verification Protocol (Phase 4.5)
2
+
3
+ The orchestrator verifies each finding with severity `critical` or `warning` by reading the actual code at the cited evidence locations in `$REVIEW_DIR`. This catches false positives that survived subagent self-verification.
4
+
5
+ ## Verification Steps
6
+
7
+ For each critical/warning finding:
8
+
9
+ 1. **Parse the evidence field** — extract file:line references cited by the subagent
10
+ 2. **Read the cited files** from `$REVIEW_DIR` at the referenced line numbers
11
+ 3. **Verify the claim** based on finding category (see rules below)
12
+ 4. **Mark verification status**:
13
+ - `verified: true` — evidence checks out, issue is real → **KEEP** in report
14
+ - `verified: false` — evidence is wrong (e.g., try-catch DOES exist) → **DROP** from report
15
+ - `verified: "unverifiable"` — can't confirm within timeout → **DOWNGRADE** to `suggestion`
16
+
17
+ ## Category-Specific Verification Rules
18
+
19
+ | Category | Verification Method | FALSE if... |
20
+ |----------|---------------------|-------------|
21
+ | **Error handling claims** | Read the controller/route handler that calls this code path | A try-catch exists at the HTTP boundary |
22
+ | **Null safety claims** | Read the data source (SQL query, API contract) | The source guarantees non-null (PK, NOT NULL, JOIN constraint). Also verify basic language semantics first (e.g., `Array.isArray(null)` → `false`, `Boolean(undefined)` → `false`) |
23
+ | **Logic error claims** | Trace the cited execution path | No realistic input triggers the bug |
24
+ | **Framework pattern claims** | Check if the specific usage context makes the pattern safe | The usage context makes the pattern safe |
25
+ | **Redundant/unnecessary code claims** | Find ALL callers of the function (grep/LSP) | The function is called from multiple paths with different inputs — the "redundant" code may be necessary for another path (FALSE or DOWNGRADE to improvement) |
26
+
27
+ ## Timeout Policy
28
+
29
+ 30 seconds per finding. If verification takes longer, mark as `unverifiable` and move on.
30
+
31
+ ## Checkpoint Schema
32
+
33
+ Save results to `.checkpoints/phase-4.5-verification.json`:
34
+
35
+ ```json
36
+ {
37
+ "findings_checked": 5,
38
+ "verified_true": 3,
39
+ "verified_false": 1,
40
+ "unverifiable": 1,
41
+ "dropped_findings": [
42
+ {
43
+ "original": { "file": "...", "line": 42, "message": "..." },
44
+ "reason": "try-catch exists at controller.js:28"
45
+ }
46
+ ],
47
+ "downgraded_findings": [
48
+ {
49
+ "original": { "file": "...", "line": 99, "message": "..." },
50
+ "new_severity": "suggestion"
51
+ }
52
+ ]
53
+ }
54
+ ```
55
+
56
+ Update `manifest.json` (`completed_phase: 4.5`, `next_phase: 4.6`).
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "pr-code-reviewer",
3
+ "version": "3.3.0",
4
+ "description": "Review pull requests and staged changes for bugs, security issues, and code quality. Use this skill whenever the user mentions: review PR, code review, check this PR, review my changes, /review, PR #123, look at this diff, is this safe to merge, or provides a GitHub PR URL. Also triggers on: 'what do you think of these changes', 'review --staged', 'check my code before merge'.",
5
+ "compatibility": "OpenCode with nano-brain",
6
+ "agent": null,
7
+ "commands": [],
8
+ "tags": [
9
+ "code-review",
10
+ "pr",
11
+ "security",
12
+ "quality",
13
+ "subagents"
14
+ ]
15
+ }