@fro.bot/systematic 2.0.3 → 2.1.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 (32) hide show
  1. package/agents/research/learnings-researcher.md +27 -26
  2. package/agents/review/api-contract-reviewer.md +1 -1
  3. package/agents/review/correctness-reviewer.md +1 -1
  4. package/agents/review/data-migrations-reviewer.md +1 -1
  5. package/agents/review/dhh-rails-reviewer.md +31 -52
  6. package/agents/review/julik-frontend-races-reviewer.md +27 -200
  7. package/agents/review/kieran-python-reviewer.md +29 -116
  8. package/agents/review/kieran-rails-reviewer.md +29 -98
  9. package/agents/review/kieran-typescript-reviewer.md +29 -107
  10. package/agents/review/maintainability-reviewer.md +1 -1
  11. package/agents/review/performance-reviewer.md +1 -1
  12. package/agents/review/reliability-reviewer.md +1 -1
  13. package/agents/review/security-reviewer.md +1 -1
  14. package/agents/review/testing-reviewer.md +1 -1
  15. package/agents/workflow/pr-comment-resolver.md +99 -50
  16. package/dist/index.js +9 -0
  17. package/dist/lib/config-handler.d.ts +2 -0
  18. package/package.json +1 -1
  19. package/skills/ce-compound/SKILL.md +100 -27
  20. package/skills/ce-compound-refresh/SKILL.md +172 -74
  21. package/skills/ce-review/SKILL.md +379 -418
  22. package/skills/ce-work/SKILL.md +5 -4
  23. package/skills/ce-work-beta/SKILL.md +6 -5
  24. package/skills/claude-permissions-optimizer/scripts/extract-commands.mjs +9 -159
  25. package/skills/claude-permissions-optimizer/scripts/normalize.mjs +151 -0
  26. package/skills/git-worktree/scripts/worktree-manager.sh +163 -0
  27. package/skills/lfg/SKILL.md +2 -2
  28. package/skills/orchestrating-swarms/SKILL.md +1 -1
  29. package/skills/setup/SKILL.md +8 -137
  30. package/skills/slfg/SKILL.md +8 -4
  31. package/skills/test-browser/SKILL.md +2 -2
  32. package/skills/test-xcode/SKILL.md +2 -2
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: pr-comment-resolver
3
- description: Addresses PR review comments by implementing requested changes and reporting resolutions. Use when code review feedback needs to be resolved with code changes.
3
+ description: Evaluates and resolves a single PR review thread -- assesses validity, implements fixes, and returns a structured summary with reply text. Spawned by the resolve-pr-feedback skill.
4
4
  color: blue
5
5
  mode: subagent
6
6
  temperature: 0.1
@@ -8,79 +8,128 @@ temperature: 0.1
8
8
 
9
9
  <examples>
10
10
  <example>
11
- Context: A reviewer has left a comment on a pull request asking for a specific change to be made.
12
- user: "The reviewer commented that we should add error handling to the payment processing method"
13
- assistant: "I'll use the pr-comment-resolver agent to address this comment by implementing the error handling and reporting back"
14
- <commentary>Since there's a PR comment that needs to be addressed with code changes, use the pr-comment-resolver agent to handle the implementation and resolution.</commentary>
11
+ Context: A reviewer left a comment requesting a null check be added.
12
+ user: "Thread PRRT_abc123 on auth.js:45 -- reviewer says: 'Missing null check on user.email before accessing .toLowerCase()'"
13
+ assistant: "Reading auth.js to verify the concern... The reviewer is correct, user.email is accessed without a null guard. Adding the check."
14
+ <commentary>The agent reads the file first to verify the concern exists, then implements the fix.</commentary>
15
15
  </example>
16
16
  <example>
17
- Context: Multiple code review comments need to be addressed systematically.
18
- user: "Can you fix the issues mentioned in the code review? They want better variable names and to extract the validation logic"
19
- assistant: "Let me use the pr-comment-resolver agent to address these review comments one by one"
20
- <commentary>The user wants to resolve code review feedback, so the pr-comment-resolver agent should handle making the changes and reporting on each resolution.</commentary>
17
+ Context: A reviewer flagged a missing error handler but the code already has one.
18
+ user: "Thread PRRT_def456 on api.ts:78 -- reviewer says: 'No error handling for the fetch call'"
19
+ assistant: "Reading api.ts... There's a try/catch at line 72 that wraps this fetch call. The reviewer may have missed it. Verdict: not-addressing."
20
+ <commentary>The agent verifies the concern against actual code and determines it's invalid.</commentary>
21
21
  </example>
22
22
  </examples>
23
23
 
24
- You are an expert code review resolution specialist. Your primary responsibility is to take comments from pull requests or code reviews, implement the requested changes, and provide clear reports on how each comment was resolved.
24
+ You resolve a single PR review thread. You receive the thread ID, file path, line number, and full comment text. Your job: evaluate whether the feedback is valid, fix it if so, and return a structured summary.
25
25
 
26
- When you receive a comment or review feedback, you will:
26
+ ## Evaluation Rubric
27
27
 
28
- 1. **Analyze the Comment**: Carefully read and understand what change is being requested. Identify:
28
+ Before touching any code, read the referenced file and classify the feedback:
29
29
 
30
- - The specific code location being discussed
31
- - The nature of the requested change (bug fix, refactoring, style improvement, etc.)
32
- - Any constraints or preferences mentioned by the reviewer
30
+ 1. **Is this a question or discussion?** The reviewer is asking "why X?" or "have you considered Y?" rather than requesting a change.
31
+ - If you can answer confidently from the code and context -> verdict: `replied`
32
+ - If the answer depends on product/business decisions you can't determine -> verdict: `needs-human`
33
33
 
34
- 2. **Plan the Resolution**: Before making changes, briefly outline:
34
+ 2. **Is the concern valid?** Does the issue the reviewer describes actually exist in the code?
35
+ - NO -> verdict: `not-addressing`
35
36
 
36
- - What files need to be modified
37
- - The specific changes required
38
- - Any potential side effects or related code that might need updating
37
+ 3. **Is it still relevant?** Has the code at this location changed since the review?
38
+ - NO -> verdict: `not-addressing`
39
39
 
40
- 3. **Implement the Change**: Make the requested modifications while:
40
+ 4. **Would fixing improve the code?**
41
+ - YES -> verdict: `fixed` (or `fixed-differently` if using a better approach than suggested)
42
+ - UNCERTAIN -> default to fixing. Agent time is cheap.
41
43
 
42
- - Maintaining consistency with the existing codebase style and patterns
43
- - Ensuring the change doesn't break existing functionality
44
- - Following any project-specific guidelines from AGENTS.md (or AGENTS.md if present only as compatibility context)
45
- - Keeping changes focused and minimal to address only what was requested
44
+ **Default to fixing.** The bar for skipping is "the reviewer is factually wrong about the code." Not "this is low priority." If we're looking at it, fix it.
46
45
 
47
- 4. **Verify the Resolution**: After making changes:
46
+ **Escalate (verdict: `needs-human`)** when: architectural changes that affect other systems, security-sensitive decisions, ambiguous business logic, or conflicting reviewer feedback. This should be rare -- most feedback has a clear right answer.
48
47
 
49
- - Double-check that the change addresses the original comment
50
- - Ensure no unintended modifications were made
51
- - Verify the code still follows project conventions
48
+ ## Workflow
52
49
 
53
- 5. **Report the Resolution**: Provide a clear, concise summary that includes:
54
- - What was changed (file names and brief description)
55
- - How it addresses the reviewer's comment
56
- - Any additional considerations or notes for the reviewer
57
- - A confirmation that the issue has been resolved
50
+ 1. **Read the code** at the referenced file and line. For review threads, the file path and line are provided directly. For PR comments and review bodies (no file/line context), identify the relevant files from the comment text and the PR diff.
51
+ 2. **Evaluate validity** using the rubric above.
52
+ 3. **If fixing**: implement the change. Keep it focused -- address the feedback, don't refactor the neighborhood. Verify the change doesn't break the immediate logic.
53
+ 4. **Compose the reply text** for the parent to post. Quote the specific sentence or passage being addressed -- not the entire comment if it's long. This helps readers follow the conversation without scrolling.
58
54
 
59
- Your response format should be:
55
+ For fixed items:
56
+ ```markdown
57
+ > [quote the relevant part of the reviewer's comment]
60
58
 
59
+ Addressed: [brief description of the fix]
61
60
  ```
62
- 📝 Comment Resolution Report
63
61
 
64
- Original Comment: [Brief summary of the comment]
62
+ For fixed-differently:
63
+ ```markdown
64
+ > [quote the relevant part of the reviewer's comment]
65
65
 
66
- Changes Made:
67
- - [File path]: [Description of change]
68
- - [Additional files if needed]
66
+ Addressed differently: [what was done instead and why]
67
+ ```
69
68
 
70
- Resolution Summary:
71
- [Clear explanation of how the changes address the comment]
69
+ For replied (questions/discussion):
70
+ ```markdown
71
+ > [quote the relevant part of the reviewer's comment]
72
72
 
73
- Status: Resolved
73
+ [Direct answer to the question or explanation of the design decision]
74
74
  ```
75
75
 
76
- Key principles:
76
+ For not-addressing:
77
+ ```markdown
78
+ > [quote the relevant part of the reviewer's comment]
79
+
80
+ Not addressing: [reason with evidence, e.g., "null check already exists at line 85"]
81
+ ```
82
+
83
+ For needs-human -- do the investigation work before escalating. Don't punt with "this is complex." The user should be able to read your analysis and make a decision in under 30 seconds.
84
+
85
+ The **reply_text** (posted to the PR thread) should sound natural -- it's posted as the user, so avoid AI boilerplate like "Flagging for human review." Write it as the PR author would:
86
+ ```markdown
87
+ > [quote the relevant part of the reviewer's comment]
88
+
89
+ [Natural acknowledgment, e.g., "Good question -- this is a tradeoff between X and Y. Going to think through this before making a call." or "Need to align with the team on this one -- [brief why]."]
90
+ ```
91
+
92
+ The **decision_context** (returned to the parent for presenting to the user) is where the depth goes:
93
+ ```markdown
94
+ ## What the reviewer said
95
+ [Quoted feedback -- the specific ask or concern]
96
+
97
+ ## What I found
98
+ [What you investigated and discovered. Reference specific files, lines,
99
+ and code. Show that you did the work.]
100
+
101
+ ## Why this needs your decision
102
+ [The specific ambiguity. Not "this is complex" -- what exactly are the
103
+ competing concerns? E.g., "The reviewer wants X but the existing pattern
104
+ in the codebase does Y, and changing it would affect Z."]
105
+
106
+ ## Options
107
+ (a) [First option] -- [tradeoff: what you gain, what you lose or risk]
108
+ (b) [Second option] -- [tradeoff]
109
+ (c) [Third option if applicable] -- [tradeoff]
110
+
111
+ ## My lean
112
+ [If you have a recommendation, state it and why. If you genuinely can't
113
+ recommend, say so and explain what additional context would tip the decision.]
114
+ ```
115
+
116
+ 5. **Return the summary** -- this is your final output to the parent:
117
+
118
+ ```
119
+ verdict: [fixed | fixed-differently | replied | not-addressing | needs-human]
120
+ feedback_id: [the thread ID or comment ID]
121
+ feedback_type: [review_thread | pr_comment | review_body]
122
+ reply_text: [the full markdown reply to post]
123
+ files_changed: [list of files modified, empty if none]
124
+ reason: [one-line explanation]
125
+ decision_context: [only for needs-human -- the full markdown block above]
126
+ ```
77
127
 
78
- - Always stay focused on the specific comment being addressed
79
- - Don't make unnecessary changes beyond what was requested
80
- - If a comment is unclear, state your interpretation before proceeding
81
- - If a requested change would cause issues, explain the concern and suggest alternatives
82
- - Maintain a professional, collaborative tone in your reports
83
- - Consider the reviewer's perspective and make it easy for them to verify the resolution
128
+ ## Principles
84
129
 
85
- If you encounter a comment that requires clarification or seems to conflict with project standards, pause and explain the situation before proceeding with changes.
130
+ - Stay focused on the specific thread. Don't fix adjacent issues unless the feedback explicitly references them.
131
+ - Read before acting. Never assume the reviewer is right without checking the code.
132
+ - Never assume the reviewer is wrong without checking the code.
133
+ - If the reviewer's suggestion would work but a better approach exists, use the better approach and explain why in the reply.
134
+ - Maintain consistency with the existing codebase style and patterns.
86
135
 
package/dist/index.js CHANGED
@@ -293,8 +293,17 @@ function createConfigHandler(deps) {
293
293
  ...bundledSkills,
294
294
  ...existingCommands
295
295
  };
296
+ registerSkillsPaths(config, bundledSkillsDir);
296
297
  };
297
298
  }
299
+ function registerSkillsPaths(config, skillsDir) {
300
+ const extended = config;
301
+ extended.skills ??= {};
302
+ extended.skills.paths ??= [];
303
+ if (!extended.skills.paths.includes(skillsDir)) {
304
+ extended.skills.paths.push(skillsDir);
305
+ }
306
+ }
298
307
 
299
308
  // src/lib/skill-tool.ts
300
309
  import fs2 from "fs";
@@ -17,3 +17,5 @@ export declare function formatAgentDescription(name: string, description: string
17
17
  * Existing OpenCode config is preserved and takes precedence.
18
18
  */
19
19
  export declare function createConfigHandler(deps: ConfigHandlerDeps): (config: Config) => Promise<void>;
20
+ /** Register a directory for OpenCode's native skill discovery (`skill` tool). */
21
+ export declare function registerSkillsPaths(config: Config, skillsDir: string): void;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fro.bot/systematic",
3
- "version": "2.0.3",
3
+ "version": "2.1.0",
4
4
  "description": "Structured engineering workflows for OpenCode",
5
5
  "type": "module",
6
6
  "homepage": "https://fro.bot/systematic",
@@ -68,34 +68,83 @@ Launch these subagents IN PARALLEL. Each returns text data to the orchestrator.
68
68
  - Extracts conversation history
69
69
  - Identifies problem type, component, symptoms
70
70
  - Incorporates auto memory excerpts (if provided by the orchestrator) as supplementary evidence when identifying problem type, component, and symptoms
71
- - Validates against schema
72
- - Returns: YAML frontmatter skeleton
71
+ - Validates all enum fields against the schema values below
72
+ - Maps problem_type to the `docs/solutions/` category directory
73
+ - Suggests a filename using the pattern `[sanitized-problem-slug]-[date].md`
74
+ - Returns: YAML frontmatter skeleton (must include `category:` field mapped from problem_type), category directory path, and suggested filename
75
+
76
+ **Schema enum values (validate against these exactly):**
77
+
78
+ - **problem_type**: build_error, test_failure, runtime_error, performance_issue, database_issue, security_issue, ui_bug, integration_issue, logic_error, developer_experience, workflow_issue, best_practice, documentation_gap
79
+ - **component**: rails_model, rails_controller, rails_view, service_object, background_job, database, frontend_stimulus, hotwire_turbo, email_processing, brief_system, assistant, authentication, payments, development_workflow, testing_framework, documentation, tooling
80
+ - **root_cause**: missing_association, missing_include, missing_index, wrong_api, scope_issue, thread_violation, async_timing, memory_leak, config_error, logic_error, test_isolation, missing_validation, missing_permission, missing_workflow_step, inadequate_documentation, missing_tooling, incomplete_setup
81
+ - **resolution_type**: code_fix, migration, config_change, test_fix, dependency_update, environment_setup, workflow_improvement, documentation_update, tooling_addition, seed_data_update
82
+ - **severity**: critical, high, medium, low
83
+
84
+ **Category mapping (problem_type -> directory):**
85
+
86
+ | problem_type | Directory |
87
+ |---|---|
88
+ | build_error | build-errors/ |
89
+ | test_failure | test-failures/ |
90
+ | runtime_error | runtime-errors/ |
91
+ | performance_issue | performance-issues/ |
92
+ | database_issue | database-issues/ |
93
+ | security_issue | security-issues/ |
94
+ | ui_bug | ui-bugs/ |
95
+ | integration_issue | integration-issues/ |
96
+ | logic_error | logic-errors/ |
97
+ | developer_experience | developer-experience/ |
98
+ | workflow_issue | workflow-issues/ |
99
+ | best_practice | best-practices/ |
100
+ | documentation_gap | documentation-gaps/ |
73
101
 
74
102
  #### 2. **Solution Extractor**
75
103
  - Analyzes all investigation steps
76
104
  - Identifies root cause
77
105
  - Extracts working solution with code examples
78
106
  - Incorporates auto memory excerpts (if provided by the orchestrator) as supplementary evidence -- conversation history and the verified fix take priority; if memory notes contradict the conversation, note the contradiction as cautionary context
79
- - Returns: Solution content block
107
+ - Develops prevention strategies and best practices guidance
108
+ - Generates test cases if applicable
109
+ - Returns: Solution content block including prevention section
110
+
111
+ **Expected output sections (follow this structure):**
112
+
113
+ - **Problem**: 1-2 sentence description of the issue
114
+ - **Symptoms**: Observable symptoms (error messages, behavior)
115
+ - **What Didn't Work**: Failed investigation attempts and why they failed
116
+ - **Solution**: The actual fix with code examples (before/after when applicable)
117
+ - **Why This Works**: Root cause explanation and why the solution addresses it
118
+ - **Prevention**: Strategies to avoid recurrence, best practices, and test cases. Include concrete code examples where applicable (e.g., gem configurations, test assertions, linting rules)
80
119
 
81
120
  #### 3. **Related Docs Finder**
82
121
  - Searches `docs/solutions/` for related documentation
83
122
  - Identifies cross-references and links
84
123
  - Finds related GitHub issues
85
124
  - Flags any related learning or pattern docs that may now be stale, contradicted, or overly broad
86
- - Returns: Links, relationships, and any refresh candidates
87
-
88
- #### 4. **Prevention Strategist**
89
- - Develops prevention strategies
90
- - Creates best practices guidance
91
- - Generates test cases if applicable
92
- - Returns: Prevention/testing content
93
-
94
- #### 5. **Category Classifier**
95
- - Determines optimal `docs/solutions/` category
96
- - Validates category against schema
97
- - Suggests filename based on slug
98
- - Returns: Final path and filename
125
+ - **Assesses overlap** with the new doc being created across five dimensions: problem statement, root cause, solution approach, referenced files, and prevention rules. Score as:
126
+ - **High**: 4-5 dimensions match — essentially the same problem solved again
127
+ - **Moderate**: 2-3 dimensions match — same area but different angle or solution
128
+ - **Low**: 0-1 dimensions match — related but distinct
129
+ - Returns: Links, relationships, refresh candidates, and overlap assessment (score + which dimensions matched)
130
+
131
+ **Search strategy (grep-first filtering for efficiency):**
132
+
133
+ 1. Extract keywords from the problem context: module names, technical terms, error messages, component types
134
+ 2. If the problem category is clear, narrow search to the matching `docs/solutions/<category>/` directory
135
+ 3. Use the native content-search tool (e.g., Grep in OpenCode) to pre-filter candidate files BEFORE reading any content. Run multiple searches in parallel, case-insensitive, targeting frontmatter fields. These are template patterns -- substitute actual keywords:
136
+ - `title:.*<keyword>`
137
+ - `tags:.*(<keyword1>|<keyword2>)`
138
+ - `module:.*<module name>`
139
+ - `component:.*<component>`
140
+ 4. If search returns >25 candidates, re-run with more specific patterns. If <3, broaden to full content search
141
+ 5. Read only frontmatter (first 30 lines) of candidate files to score relevance
142
+ 6. Fully read only strong/moderate matches
143
+ 7. Return distilled links and relationships, not raw file contents
144
+
145
+ **GitHub issue search:**
146
+
147
+ Prefer the `gh` CLI for searching related issues: `gh issue list --search "<keywords>" --state all --limit 5`. If `gh` is not installed, fall back to the GitHub MCP tools (e.g., `unblocked` data_retrieval) if available. If neither is available, skip GitHub issue search and note it was skipped in the output.
99
148
 
100
149
  </parallel_tasks>
101
150
 
@@ -108,10 +157,22 @@ Launch these subagents IN PARALLEL. Each returns text data to the orchestrator.
108
157
  The orchestrating agent (main conversation) performs these steps:
109
158
 
110
159
  1. Collect all text results from Phase 1 subagents
111
- 2. Assemble complete markdown file from the collected pieces
112
- 3. Validate YAML frontmatter against schema
113
- 4. Create directory if needed: `mkdir -p docs/solutions/[category]/`
114
- 5. Write the SINGLE final file: `docs/solutions/[category]/[filename].md`
160
+ 2. **Check the overlap assessment** from the Related Docs Finder before deciding what to write:
161
+
162
+ | Overlap | Action |
163
+ |---------|--------|
164
+ | **High** — existing doc covers the same problem, root cause, and solution | **Update the existing doc** with fresher context (new code examples, updated references, additional prevention tips) rather than creating a duplicate. The existing doc's path and structure stay the same. |
165
+ | **Moderate** — same problem area but different angle, root cause, or solution | **Create the new doc** normally. Flag the overlap for Phase 2.5 to recommend consolidation review. |
166
+ | **Low or none** | **Create the new doc** normally. |
167
+
168
+ The reason to update rather than create: two docs describing the same problem and solution will inevitably drift apart. The newer context is fresher and more trustworthy, so fold it into the existing doc rather than creating a second one that immediately needs consolidation.
169
+
170
+ When updating an existing doc, preserve its file path and frontmatter structure. Update the solution, code examples, prevention tips, and any stale references. Add a `last_updated: YYYY-MM-DD` field to the frontmatter. Do not change the title unless the problem framing has materially shifted.
171
+
172
+ 3. Assemble complete markdown file from the collected pieces
173
+ 4. Validate YAML frontmatter against schema
174
+ 5. Create directory if needed: `mkdir -p docs/solutions/[category]/`
175
+ 6. Write the file: either the updated existing doc or the new `docs/solutions/[category]/[filename].md`
115
176
 
116
177
  </sequential_tasks>
117
178
 
@@ -128,6 +189,7 @@ It makes sense to invoke `ce:compound-refresh` when one or more of these are tru
128
189
  3. The current work involved a refactor, migration, rename, or dependency upgrade that likely invalidated references in older docs
129
190
  4. A pattern doc now looks overly broad, outdated, or no longer supported by the refreshed reality
130
191
  5. The Related Docs Finder surfaced high-confidence refresh candidates in the same problem space
192
+ 6. The Related Docs Finder reported **moderate overlap** with an existing doc — there may be consolidation opportunities that benefit from a focused review
131
193
 
132
194
  It does **not** make sense to invoke `ce:compound-refresh` when:
133
195
 
@@ -214,7 +276,7 @@ re-run /compound in a fresh session.
214
276
 
215
277
  **No subagents are launched. No parallel tasks. One file written.**
216
278
 
217
- In compact-safe mode, only suggest `ce:compound-refresh` if there is an obvious narrow refresh target. Do not broaden into a large refresh sweep from a compact-safe session.
279
+ In compact-safe mode, the overlap check is skipped (no Related Docs Finder subagent). This means compact-safe mode may create a doc that overlaps with an existing one. That is acceptable — `ce:compound-refresh` will catch it later. Only suggest `ce:compound-refresh` if there is an obvious narrow refresh target. Do not broaden into a large refresh sweep from a compact-safe session.
218
280
 
219
281
  ---
220
282
 
@@ -265,7 +327,8 @@ In compact-safe mode, only suggest `ce:compound-refresh` if there is an obvious
265
327
  |----------|-----------|
266
328
  | Subagents write files like `context-analysis.md`, `solution-draft.md` | Subagents return text data; orchestrator writes one final file |
267
329
  | Research and assembly run in parallel | Research completes → then assembly runs |
268
- | Multiple files created during workflow | Single file: `docs/solutions/[category]/[filename].md` |
330
+ | Multiple files created during workflow | One file written or updated: `docs/solutions/[category]/[filename].md` |
331
+ | Creating a new doc when an existing doc covers the same problem | Check overlap assessment; update the existing doc when overlap is high |
269
332
 
270
333
  ## Success Output
271
334
 
@@ -275,11 +338,9 @@ In compact-safe mode, only suggest `ce:compound-refresh` if there is an obvious
275
338
  Auto memory: 2 relevant entries used as supplementary evidence
276
339
 
277
340
  Subagent Results:
278
- ✓ Context Analyzer: Identified performance_issue in brief_system
279
- ✓ Solution Extractor: 3 code fixes
341
+ ✓ Context Analyzer: Identified performance_issue in brief_system, category: performance-issues/
342
+ ✓ Solution Extractor: 3 code fixes, prevention strategies
280
343
  ✓ Related Docs Finder: 2 related issues
281
- ✓ Prevention Strategist: Prevention strategies, test suggestions
282
- ✓ Category Classifier: `performance-issues`
283
344
 
284
345
  Specialized Agent Reviews (Auto-Triggered):
285
346
  ✓ performance-oracle: Validated query optimization approach
@@ -301,6 +362,19 @@ What's next?
301
362
  5. Other
302
363
  ```
303
364
 
365
+ **Alternate output (when updating an existing doc due to high overlap):**
366
+
367
+ ```
368
+ ✓ Documentation updated (existing doc refreshed with current context)
369
+
370
+ Overlap detected: docs/solutions/performance-issues/n-plus-one-queries.md
371
+ Matched dimensions: problem statement, root cause, solution, referenced files
372
+ Action: Updated existing doc with fresher code examples and prevention tips
373
+
374
+ File updated:
375
+ - docs/solutions/performance-issues/n-plus-one-queries.md (added last_updated: 2026-03-24)
376
+ ```
377
+
304
378
  ## The Compounding Philosophy
305
379
 
306
380
  This creates a compounding knowledge system:
@@ -353,7 +427,6 @@ Based on problem type, these agents can enhance documentation:
353
427
  ### When to Invoke
354
428
  - **Auto-triggered** (optional): Agents can run post-documentation for enhancement
355
429
  - **Manual trigger**: User can invoke agents after /ce:compound completes for deeper review
356
- - **Customize agents**: Edit `systematic.local.md` or invoke the `setup` skill to configure which review agents are used across all workflows
357
430
 
358
431
  ## Related Commands
359
432