@juicesharp/rpiv-pi 0.5.0 → 0.5.1

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juicesharp/rpiv-pi",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "Skill-based development workflow for Pi Agent — discover, research, design, plan, implement, validate",
5
5
  "keywords": ["pi-package", "pi-extension", "rpiv", "skills", "workflow"],
6
6
  "license": "MIT",
@@ -22,37 +22,38 @@ I'll analyze the current codebase, generate solution options, and provide recomm
22
22
 
23
23
  Then wait for the user's request.
24
24
 
25
- ## Steps to follow after receiving the request:
25
+ ## Steps
26
26
 
27
- 1. **Read context files and understand the problem:**
28
- - If user mentions tickets, research docs, or other files, read them FULLY first
29
- - **IMPORTANT**: Use Read tool WITHOUT limit/offset parameters
30
- - **CRITICAL**: Read these files in main context before invoking skills
31
- - Extract requirements, constraints, and goals
32
- - Identify what problem we're solving
27
+ ### Step 1: Read Mentioned Files
33
28
 
34
- 2. **Generate candidates and dimensions:**
29
+ - If user mentions tickets, research docs, or other files, read them FULLY first
30
+ - **IMPORTANT**: Use Read tool WITHOUT limit/offset parameters
31
+ - **CRITICAL**: Read these files in main context before invoking skills
32
+ - Extract requirements, constraints, and goals
33
+ - Identify what problem we're solving
35
34
 
36
- **Generate 2–4 named candidates** from three sources, then merge into one shortlist:
35
+ ### Step 2: Generate Candidates and Dimensions
37
36
 
38
- - **Ecosystem scan** — spawn `web-search-researcher` for any topic where the candidate space includes external libraries, frameworks, or services. Prompt it to return 2–4 named options with one-line "what it is" + canonical doc link per option. Skip only when the topic is wholly internal (e.g., "how to organize this service layer") and the orchestrator's design-space enumeration plus the user shortlist already cover the space.
39
- - **Design-space enumeration** — orchestrator names abstract shapes from first principles when applicable (pub/sub vs direct-call vs event-bus; sync vs async; manual mapping vs auto-mapper). One-line "what it is" per shape.
40
- - **User shortlist** — if the user pre-named candidates in the entry prompt ("compare TanStack Query vs SWR"), include those verbatim.
37
+ **Generate 2–4 named candidates** from three sources, then merge into one shortlist:
41
38
 
42
- Merge to 2–4 candidates total. Name each with a short noun phrase ("TanStack Query", "Direct event bus"). Deduplicate.
39
+ - **Ecosystem scan** — spawn `web-search-researcher` for any topic where the candidate space includes external libraries, frameworks, or services. Prompt it to return 2–4 named options with one-line "what it is" + canonical doc link per option. Skip only when the topic is wholly internal (e.g., "how to organize this service layer") and the orchestrator's design-space enumeration plus the user shortlist already cover the space.
40
+ - **Design-space enumeration** — orchestrator names abstract shapes from first principles when applicable (pub/sub vs direct-call vs event-bus; sync vs async; manual mapping vs auto-mapper). One-line "what it is" per shape.
41
+ - **User shortlist** — if the user pre-named candidates in the entry prompt ("compare TanStack Query vs SWR"), include those verbatim.
43
42
 
44
- **Default dimension list** (presented at Step 2.5; developer may drop irrelevant ones):
43
+ Merge to 2–4 candidates total. Name each with a short noun phrase ("TanStack Query", "Direct event bus"). Deduplicate.
45
44
 
46
- - **approach-shape** (hybrid) what category of solution the candidate is, what core moving parts it requires.
47
- - **precedent-fit** (codebase-anchored) — does the existing code already use this pattern; how many call sites would adopt the new option.
48
- - **integration-risk** (codebase-anchored) — which existing seams the candidate would touch; what breaks if it lands.
49
- - **migration-cost** (external-anchored for libraries; codebase-anchored for in-house code) — work to introduce the candidate plus work to remove the incumbent if there is one.
50
- - **verification-cost** (codebase-anchored) — test/CI surface needed to make the candidate safe to adopt.
51
- - **novelty** (external-anchored) — how recently the candidate emerged, ecosystem momentum, deprecation risk.
45
+ **Default dimension list** (presented at Step 3; developer may drop irrelevant ones):
52
46
 
53
- Hold the candidate set and default dimension list in working state for the Step 2.5 checkpoint. Do not dispatch fit agents yet.
47
+ - **approach-shape** (hybrid) what category of solution the candidate is, what core moving parts it requires.
48
+ - **precedent-fit** (codebase-anchored) — does the existing code already use this pattern; how many call sites would adopt the new option.
49
+ - **integration-risk** (codebase-anchored) — which existing seams the candidate would touch; what breaks if it lands.
50
+ - **migration-cost** (external-anchored for libraries; codebase-anchored for in-house code) — work to introduce the candidate plus work to remove the incumbent if there is one.
51
+ - **verification-cost** (codebase-anchored) — test/CI surface needed to make the candidate safe to adopt.
52
+ - **novelty** (external-anchored) — how recently the candidate emerged, ecosystem momentum, deprecation risk.
54
53
 
55
- ## Step 2.5: Candidate Checkpoint
54
+ Hold the candidate set and default dimension list in working state for the Step 3 checkpoint. Do not dispatch fit agents yet.
55
+
56
+ ### Step 3: Candidate Checkpoint
56
57
 
57
58
  Present the candidate set and default dimensions to the developer before per-candidate fit dispatch.
58
59
 
@@ -74,251 +75,257 @@ Present the candidate set and default dimensions to the developer before per-can
74
75
 
75
76
  3. **Handle developer input:**
76
77
 
77
- **"Proceed"**: lock the candidate × dimension set; advance to Step 3.
78
+ **"Proceed"**: lock the candidate × dimension set; advance to Step 4.
78
79
 
79
80
  **"Adjust candidates or dimensions"**: ask the follow-up free-text question with prefix `❓ Question:` — "Which candidates and dimensions should be added, dropped, or renamed?" — apply edits to the working set, re-present, and confirm again with the same three-option `ask_user_question`.
80
81
 
81
- **"Re-generate candidates"**: ask the follow-up free-text question with prefix `❓ Question:` — "What should be different in candidate generation? (narrower/wider scope, different ecosystem, exclude approach X, …)" — return to Step 2 with the updated scope, then re-enter Step 2.5.
82
+ **"Re-generate candidates"**: ask the follow-up free-text question with prefix `❓ Question:` — "What should be different in candidate generation? (narrower/wider scope, different ecosystem, exclude approach X, …)" — return to Step 2 with the updated scope, then re-enter Step 3.
82
83
 
83
84
  Loop until "Proceed" is selected.
84
85
 
85
- 3. **Per-candidate fit dispatch (parallel agents):**
86
+ ### Step 4: Per-Candidate Fit Dispatch (parallel agents)
86
87
 
87
- For each confirmed candidate, dispatch up to two agents in parallel — total ≤ 2 × N agents:
88
+ For each confirmed candidate, dispatch up to two agents in parallel — total ≤ 2 × N agents:
88
89
 
89
- - **One `codebase-analyzer` per candidate** — when ≥1 kept dimension is codebase-anchored (precedent-fit, integration-risk, often migration-cost and verification-cost). The agent scores the candidate on every kept codebase-anchored dimension in a single pass, returning evidence per dimension with `file:line` references.
90
- - **One `web-search-researcher` per candidate** — when ≥1 kept dimension is external-anchored (novelty, often migration-cost for libraries, approach-shape for ecosystem options). The agent scores the candidate on every kept external-anchored dimension in a single pass, returning evidence per dimension with doc/source links.
90
+ - **One `codebase-analyzer` per candidate** — when ≥1 kept dimension is codebase-anchored (precedent-fit, integration-risk, often migration-cost and verification-cost). The agent scores the candidate on every kept codebase-anchored dimension in a single pass, returning evidence per dimension with `file:line` references.
91
+ - **One `web-search-researcher` per candidate** — when ≥1 kept dimension is external-anchored (novelty, often migration-cost for libraries, approach-shape for ecosystem options). The agent scores the candidate on every kept external-anchored dimension in a single pass, returning evidence per dimension with doc/source links.
91
92
 
92
- Skip either agent for a candidate when no dimension of that anchor-type was kept. Hybrid dimension `approach-shape` is scored by the orchestrator after both agents return, by combining their per-candidate findings.
93
+ Skip either agent for a candidate when no dimension of that anchor-type was kept. Hybrid dimension `approach-shape` is scored by the orchestrator after both agents return, by combining their per-candidate findings.
93
94
 
94
- **Per-candidate prompt shape** (use the same outer template, fill in candidate name and kept dimensions):
95
+ **Per-candidate prompt shape** (use the same outer template, fill in candidate name and kept dimensions):
95
96
 
96
- ```
97
- Candidate: [name] — [one-line what it is]
98
- Topic: [topic from Step 1]
97
+ ```
98
+ Candidate: [name] — [one-line what it is]
99
+ Topic: [topic from Step 1]
99
100
 
100
- Score this single candidate on the following dimensions, each with concrete evidence ([file:line] for codebase, doc/source link for external). Report findings as one section per dimension.
101
+ Score this single candidate on the following dimensions, each with concrete evidence ([file:line] for codebase, doc/source link for external). Report findings as one section per dimension.
101
102
 
102
- Dimensions for this run:
103
- - [dimension name] — [one-line of what to look for]
104
- - ...
103
+ Dimensions for this run:
104
+ - [dimension name] — [one-line of what to look for]
105
+ - ...
105
106
 
106
- Do NOT compare against other candidates; another agent handles each one separately. Focus on depth of evidence for THIS candidate.
107
- ```
107
+ Do NOT compare against other candidates; another agent handles each one separately. Focus on depth of evidence for THIS candidate.
108
+ ```
109
+
110
+ Wait for ALL agents to complete before proceeding.
111
+
112
+ **Coverage check**: every (candidate × kept-dimension) cell is filled — by an agent's evidence or by an explicit `null` ("does not apply to this candidate"). Cells silently dropped indicate a missing dispatch — re-run that candidate's agent.
113
+
114
+ ### Step 5: Synthesize and Recommend
115
+
116
+ - Cross-reference per-candidate findings — fill the candidate × dimension grid with evidence per cell.
117
+ - Apply the fit filter qualitatively per candidate: a candidate "clears" when no kept dimension surfaces a blocking concern (integration-risk that breaks load-bearing seams, migration-cost that exceeds the topic's scope, verification-cost with no path to coverage).
118
+ - **If ≥1 candidate clears the fit filter**: pick the strongest, document rationale with evidence, and explain why alternatives weren't chosen. Identify conditions that would change the recommendation.
119
+ - **If every candidate fails the fit filter**: produce a "no-fit" recommendation — list each candidate's blocking dimension with evidence, recommend re-scoping the question or expanding the candidate pool, and set Step 7 frontmatter `confidence: low` and `status: blocked`.
120
+
121
+ ### Step 6: Determine Metadata and Filename
122
+
123
+ - Filename format: `thoughts/shared/solutions/YYYY-MM-DD_HH-MM-SS_[topic].md`
124
+ - YYYY-MM-DD_HH-MM-SS: Current date and time (e.g., 2025-10-11_14-30-22)
125
+ - [topic]: Brief kebab-case description
126
+ - Repository name: from git root basename, or current directory basename if not a git repo
127
+ - Use the git branch and commit from the git context injected at the start of the session (or run `git branch --show-current` / `git rev-parse --short HEAD` directly)
128
+ - Researcher: use the User from the git context injected at the start of the session (fallback: "unknown")
129
+ - If metadata unavailable: use "unknown" for commit/branch
130
+
131
+ ### Step 7: Generate Solutions Document
132
+
133
+ - Use the metadata gathered in step 6
134
+ - Structure the document with YAML frontmatter followed by content:
135
+
136
+ ```markdown
137
+ ---
138
+ date: [Current date and time with timezone in ISO format]
139
+ researcher: [Researcher name]
140
+ git_commit: [Current commit hash]
141
+ branch: [Current branch name]
142
+ repository: [Repository name]
143
+ topic: "[Feature/Problem]"
144
+ confidence: high | medium | low
145
+ complexity: low | medium | high
146
+ status: ready | awaiting_input | blocked
147
+ tags: [solutions, component-names]
148
+ last_updated: [Current date in YYYY-MM-DD format]
149
+ last_updated_by: [Researcher name]
150
+ ---
108
151
 
109
- Wait for ALL agents to complete before proceeding.
110
-
111
- **Coverage check**: every (candidate × kept-dimension) cell is filled — by an agent's evidence or by an explicit `null` ("does not apply to this candidate"). Cells silently dropped indicate a missing dispatch — re-run that candidate's agent.
112
-
113
- 4. **Synthesize and recommend:**
152
+ # Solution Analysis: [Feature/Problem]
114
153
 
115
- - Cross-reference per-candidate findings fill the candidate × dimension grid with evidence per cell.
116
- - Apply the fit filter qualitatively per candidate: a candidate "clears" when no kept dimension surfaces a blocking concern (integration-risk that breaks load-bearing seams, migration-cost that exceeds the topic's scope, verification-cost with no path to coverage).
117
- - **If ≥1 candidate clears the fit filter**: pick the strongest, document rationale with evidence, and explain why alternatives weren't chosen. Identify conditions that would change the recommendation.
118
- - **If every candidate fails the fit filter**: produce a "no-fit" recommendation list each candidate's blocking dimension with evidence, recommend re-scoping the question or expanding the candidate pool, and set Step 6 frontmatter `confidence: low` and `status: blocked`.
119
-
120
- 5. **Determine metadata and filename:**
121
- - Filename format: `thoughts/shared/solutions/YYYY-MM-DD_HH-MM-SS_[topic].md`
122
- - YYYY-MM-DD_HH-MM-SS: Current date and time (e.g., 2025-10-11_14-30-22)
123
- - [topic]: Brief kebab-case description
124
- - Repository name: from git root basename, or current directory basename if not a git repo
125
- - Use the git branch and commit from the git context injected at the start of the session (or run `git branch --show-current` / `git rev-parse --short HEAD` directly)
126
- - Researcher: use the User from the git context injected at the start of the session (fallback: "unknown")
127
- - If metadata unavailable: use "unknown" for commit/branch
154
+ **Date**: [Current date and time with timezone from step 6]
155
+ **Researcher**: [Researcher name from step 6]
156
+ **Git Commit**: [Current commit hash from step 6]
157
+ **Branch**: [Current branch name from step 6]
158
+ **Repository**: [Repository name]
128
159
 
129
- 6. **Generate solutions document:**
130
- - Use the metadata gathered in step 5
131
- - Structure the document with YAML frontmatter followed by content:
132
- ```markdown
133
- ---
134
- date: [Current date and time with timezone in ISO format]
135
- researcher: [Researcher name]
136
- git_commit: [Current commit hash]
137
- branch: [Current branch name]
138
- repository: [Repository name]
139
- topic: "[Feature/Problem]"
140
- confidence: high | medium | low
141
- complexity: low | medium | high
142
- status: ready | awaiting_input | blocked
143
- tags: [solutions, component-names]
144
- last_updated: [Current date in YYYY-MM-DD format]
145
- last_updated_by: [Researcher name]
146
- ---
160
+ ## Research Question
161
+ [Original user query]
147
162
 
148
- # Solution Analysis: [Feature/Problem]
163
+ ## Summary
164
+ **Problem**: [What we're solving]
165
+ **Recommended**: [Option name] - [One sentence why]
166
+ **Effort**: [Low/Med/High] ([N days])
167
+ **Confidence**: [High/Med/Low]
149
168
 
150
- **Date**: [Current date and time with timezone from step 5]
151
- **Researcher**: [Researcher name from step 5]
152
- **Git Commit**: [Current commit hash from step 5]
153
- **Branch**: [Current branch name from step 5]
154
- **Repository**: [Repository name]
169
+ ## Problem Statement
155
170
 
156
- ## Research Question
157
- [Original user query]
171
+ **Requirements:**
172
+ - [Requirement 1]
173
+ - [Requirement 2]
158
174
 
159
- ## Summary
160
- **Problem**: [What we're solving]
161
- **Recommended**: [Option name] - [One sentence why]
162
- **Effort**: [Low/Med/High] ([N days])
163
- **Confidence**: [High/Med/Low]
175
+ **Constraints:**
176
+ - [Hard constraint - must respect]
177
+ - [Soft constraint - should consider]
164
178
 
165
- ## Problem Statement
179
+ **Success criteria:**
180
+ - [What "done" looks like]
166
181
 
167
- **Requirements:**
168
- - [Requirement 1]
169
- - [Requirement 2]
182
+ ## Current State
170
183
 
171
- **Constraints:**
172
- - [Hard constraint - must respect]
173
- - [Soft constraint - should consider]
184
+ **Existing implementation:**
185
+ [What exists with file:line references]
174
186
 
175
- **Success criteria:**
176
- - [What "done" looks like]
187
+ **Relevant patterns:**
188
+ - [Pattern 1]: `file.ext:line` - Used in [N] places
189
+ - [Pattern 2]: `file.ext:line` - Used in [N] places
177
190
 
178
- ## Current State
191
+ **Integration points:**
192
+ - `file.ext:line` - [Where feature hooks in]
193
+ - `file.ext:line` - [Another integration point]
179
194
 
180
- **Existing implementation:**
181
- [What exists with file:line references]
195
+ ## Solution Options
182
196
 
183
- **Relevant patterns:**
184
- - [Pattern 1]: `file.ext:line` - Used in [N] places
185
- - [Pattern 2]: `file.ext:line` - Used in [N] places
197
+ ### Option 1: [Name]
198
+ **How it works:**
199
+ [2-3 sentence description + implementation approach]
186
200
 
187
- **Integration points:**
188
- - `file.ext:line` - [Where feature hooks in]
189
- - `file.ext:line` - [Another integration point]
201
+ **Pros:**
202
+ - [Advantage with evidence from codebase]
203
+ - [Advantage with evidence]
190
204
 
191
- ## Solution Options
205
+ **Cons:**
206
+ - [Disadvantage with impact]
192
207
 
193
- ### Option 1: [Name]
194
- **How it works:**
195
- [2-3 sentence description + implementation approach]
208
+ **Complexity:** [Low/Med/High] (~[N] days)
209
+ - Files to create: [N] (~[X] lines)
210
+ - Files to modify: [N] (~[X] lines)
211
+ - Risk level: [Low/Med/High]
196
212
 
197
- **Pros:**
198
- - [Advantage with evidence from codebase]
199
- - [Advantage with evidence]
213
+ ### Option 2: [Alternative Name]
214
+ [Same structure as Option 1]
200
215
 
201
- **Cons:**
202
- - [Disadvantage with impact]
216
+ ### Option 3: [Another Alternative]
217
+ [Same structure as Option 1]
203
218
 
204
- **Complexity:** [Low/Med/High] (~[N] days)
205
- - Files to create: [N] (~[X] lines)
206
- - Files to modify: [N] (~[X] lines)
207
- - Risk level: [Low/Med/High]
219
+ ## Comparison
208
220
 
209
- ### Option 2: [Alternative Name]
210
- [Same structure as Option 1]
221
+ | Criteria | Option 1 | Option 2 | Option 3 |
222
+ |----------|----------|----------|----------|
223
+ | Complexity | [L/M/H] | [L/M/H] | [L/M/H] |
224
+ | Codebase fit | [H/M/L] | [H/M/L] | [H/M/L] |
225
+ | Risk | [L/M/H] | [L/M/H] | [L/M/H] |
211
226
 
212
- ### Option 3: [Another Alternative]
213
- [Same structure as Option 1]
227
+ ## Recommendation
214
228
 
215
- ## Comparison
229
+ <!-- Render exactly ONE of the two blocks below, based on Step 5's fit-filter outcome. -->
216
230
 
217
- | Criteria | Option 1 | Option 2 | Option 3 |
218
- |----------|----------|----------|----------|
219
- | Complexity | [L/M/H] | [L/M/H] | [L/M/H] |
220
- | Codebase fit | [H/M/L] | [H/M/L] | [H/M/L] |
221
- | Risk | [L/M/H] | [L/M/H] | [L/M/H] |
231
+ **(A) When 1 candidate clears the fit filter:**
222
232
 
223
- ## Recommendation
233
+ **Selected:** [Option N]
224
234
 
225
- <!-- Render exactly ONE of the two blocks below, based on Step 4's fit-filter outcome. -->
235
+ **Rationale:**
236
+ - [Key reason with evidence]
237
+ - [Key reason with evidence]
238
+ - ...
226
239
 
227
- **(A) When ≥1 candidate clears the fit filter:**
240
+ **Why not alternatives:**
241
+ - Option X: [Reason]
228
242
 
229
- **Selected:** [Option N]
243
+ **Trade-offs:**
244
+ - Accepting [limitation] for [benefit]
230
245
 
231
- **Rationale:**
232
- - [Key reason with evidence]
233
- - [Key reason with evidence]
234
- - ...
246
+ **Implementation approach:**
247
+ 1. [Phase 1] - [What to build]
248
+ 2. ...
235
249
 
236
- **Why not alternatives:**
237
- - Option X: [Reason]
250
+ **Integration points:**
251
+ - `file.ext:line` - [Specific change]
252
+ - `file.ext:line` - [Specific change]
238
253
 
239
- **Trade-offs:**
240
- - Accepting [limitation] for [benefit]
254
+ **Patterns to follow:**
255
+ - [Pattern]: `file.ext:line`
241
256
 
242
- **Implementation approach:**
243
- 1. [Phase 1] - [What to build]
244
- 2. ...
257
+ **Risks:**
258
+ - [Risk]: [Mitigation]
245
259
 
246
- **Integration points:**
247
- - `file.ext:line` - [Specific change]
248
- - `file.ext:line` - [Specific change]
260
+ **(B) When every candidate fails the fit filter:**
249
261
 
250
- **Patterns to follow:**
251
- - [Pattern]: `file.ext:line`
262
+ **No-fit:** every candidate surfaced a blocking concern on at least one kept dimension.
252
263
 
253
- **Risks:**
254
- - [Risk]: [Mitigation]
264
+ **Per-candidate blockers:**
265
+ - [Option 1]: [blocking dimension] — [evidence with file:line or doc link]
266
+ - [Option 2]: [blocking dimension] — [evidence]
267
+ - ...
255
268
 
256
- **(B) When every candidate fails the fit filter:**
269
+ **Recommended next step:**
270
+ - [Re-scope the question] — [how the topic should narrow/widen so candidates can clear]
271
+ - OR [Expand the candidate pool] — [what new candidate sources to enumerate; e.g., named ecosystem option not surfaced by Step 2]
257
272
 
258
- **No-fit:** every candidate surfaced a blocking concern on at least one kept dimension.
273
+ **Frontmatter overrides:** set `confidence: low` and `status: blocked`.
259
274
 
260
- **Per-candidate blockers:**
261
- - [Option 1]: [blocking dimension] — [evidence with file:line or doc link]
262
- - [Option 2]: [blocking dimension] — [evidence]
263
- - ...
275
+ ## Scope Boundaries
276
+ - [What we're building]
277
+ - [What we're NOT doing]
264
278
 
265
- **Recommended next step:**
266
- - [Re-scope the question] — [how the topic should narrow/widen so candidates can clear]
267
- - OR [Expand the candidate pool] — [what new candidate sources to enumerate; e.g., named ecosystem option not surfaced by Step 2]
279
+ ## Testing Strategy
268
280
 
269
- **Frontmatter overrides:** set `confidence: low` and `status: blocked`.
281
+ **Unit tests:**
282
+ - [Key test scenario 1]
283
+ - ...
270
284
 
271
- ## Scope Boundaries
272
- - [What we're building]
273
- - [What we're NOT doing]
285
+ **Integration tests:**
286
+ - [End-to-end scenario 1]
287
+ - ...
274
288
 
275
- ## Testing Strategy
289
+ **Manual verification:**
290
+ - [ ] [Manual test 1]
291
+ - [ ] ...
276
292
 
277
- **Unit tests:**
278
- - [Key test scenario 1]
279
- - ...
293
+ ## Open Questions
294
+ **Resolved during research:**
295
+ - [Question that was answered] - [Answer with evidence from file:line]
280
296
 
281
- **Integration tests:**
282
- - [End-to-end scenario 1]
283
- - ...
297
+ **Requires user input:**
298
+ - [Business or design question] - [Default assumption for planning]
284
299
 
285
- **Manual verification:**
286
- - [ ] [Manual test 1]
287
- - [ ] ...
300
+ **Blockers:**
301
+ - [Critical unknown that prevents implementation] - [How to unblock]
288
302
 
289
- ## Open Questions
290
- **Resolved during research:**
291
- - [Question that was answered] - [Answer with evidence from file:line]
303
+ ## References
292
304
 
293
- **Requires user input:**
294
- - [Business or design question] - [Default assumption for planning]
305
+ - `thoughts/shared/research/[file].md` - [Context]
306
+ - `src/file.ext:line` - [Similar implementation]
307
+ - `thoughts/shared/[file].md` - [Historical decision]
308
+ ```
295
309
 
296
- **Blockers:**
297
- - [Critical unknown that prevents implementation] - [How to unblock]
310
+ ### Step 8: Present Findings
298
311
 
299
- ## References
312
+ - Present concise summary with clear recommendation
313
+ - Highlight key integration points
314
+ - Ask if they want to proceed to /skill:design with the chosen option or need clarification
300
315
 
301
- - `thoughts/shared/research/[file].md` - [Context]
302
- - `src/file.ext:line` - [Similar implementation]
303
- - `thoughts/shared/[file].md` - [Historical decision]
304
- ```
316
+ ### Step 9: Handle Follow-up Questions
305
317
 
306
- 7. **Present findings:**
307
- - Present concise summary with clear recommendation
308
- - Highlight key integration points
309
- - Ask if they want to proceed to /skill:design with the chosen option or need clarification
318
+ - If user has questions, append to same document
319
+ - Update frontmatter: `last_updated` and `last_updated_by`
320
+ - Add section: `## Follow-up Analysis [timestamp]`
321
+ - Spawn additional agents as needed
310
322
 
311
- 8. **Handle follow-up questions:**
312
- - If user has questions, append to same document
313
- - Update frontmatter: `last_updated` and `last_updated_by`
314
- - Add section: `## Follow-up Analysis [timestamp]`
315
- - Spawn additional agents as needed
323
+ ## Important Notes
316
324
 
317
- ## Important notes:
318
325
  - Always use parallel Agent tool calls to maximize efficiency and minimize context usage
319
326
  - Always spawn fresh research to validate current state - never rely on old research docs as source of truth
320
327
  - Old research documents can provide historical context but must be validated against current code
321
- - Generate 2-4 named candidates in Step 2; confirm them with the developer at Step 2.5 before per-candidate fit dispatch
328
+ - Generate 2-4 named candidates in Step 2; confirm them with the developer at Step 3 before per-candidate fit dispatch
322
329
  - Web-search-researcher is a first-class Step 2 agent for ecosystem candidate-source — skip only when the topic is wholly internal and design-space enumeration plus user shortlist cover the space
323
330
  - Per-candidate fit dispatch caps at two agents per candidate (one codebase-analyzer, one web-search-researcher) — skip either when no dimension of its anchor-type was kept
324
331
  - Solutions documents should be self-contained with all necessary context
@@ -332,7 +339,7 @@ Present the candidate set and default dimensions to the developer before per-can
332
339
  - **File reading**: Always read mentioned files FULLY (no limit/offset) before invoking skills
333
340
  - **Critical ordering**: Follow the numbered steps exactly
334
341
  - ALWAYS read mentioned files first before invoking skills (step 1)
335
- - ALWAYS generate candidates and run the Step 2.5 checkpoint before per-candidate dispatch (steps 2 → 2.53)
336
- - ALWAYS wait for all per-candidate agents to complete before synthesizing (step 3)
337
- - ALWAYS gather metadata before writing the document (step 5 before step 6)
342
+ - ALWAYS generate candidates and run the Step 3 checkpoint before per-candidate dispatch (steps 2 → 34)
343
+ - ALWAYS wait for all per-candidate agents to complete before synthesizing (step 4)
344
+ - ALWAYS gather metadata before writing the document (step 6 before step 7)
338
345
  - NEVER write the solutions document with placeholder values