@comfanion/workflow 4.38.1-dev.11 → 4.38.1-dev.13
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 +1 -1
- package/src/build-info.json +3 -2
- package/src/opencode/agents/reviewer.md +48 -41
- package/src/opencode/skills/code-review/SKILL.md +66 -47
- package/src/opencode/skills/dev-epic/SKILL.md +6 -2
- package/src/opencode/skills/dev-story/SKILL.md +5 -2
- package/src/opencode/skills/story-writing/template.md +8 -0
package/package.json
CHANGED
package/src/build-info.json
CHANGED
|
@@ -6,7 +6,7 @@ temperature: 0.1 # Low temperature for precise analysis
|
|
|
6
6
|
#model: openai/gpt-5.2-codex # Best at finding bugs and security issues
|
|
7
7
|
model: anthropic/claude-sonnet-4-5 # Best at finding bugs and security issues
|
|
8
8
|
|
|
9
|
-
# Tools - Read-only for review
|
|
9
|
+
# Tools - Read-only for code, but CAN write review findings to story/epic files
|
|
10
10
|
tools:
|
|
11
11
|
read: true
|
|
12
12
|
glob: true
|
|
@@ -18,12 +18,14 @@ tools:
|
|
|
18
18
|
bash: true # For running tests
|
|
19
19
|
todowrite: false # Reviewer doesn't manage todos
|
|
20
20
|
todoread: true
|
|
21
|
-
edit:
|
|
22
|
-
write: false # Reviewer doesn't write files
|
|
21
|
+
edit: true # To append ## Review section to story/epic files
|
|
22
|
+
write: false # Reviewer doesn't write new files
|
|
23
23
|
|
|
24
|
-
# Permissions - read-only
|
|
24
|
+
# Permissions - read-only for code, write ONLY to story/epic docs
|
|
25
25
|
permission:
|
|
26
|
-
edit:
|
|
26
|
+
edit:
|
|
27
|
+
"docs/sprint-artifacts/**/*.md": allow # Story and epic files
|
|
28
|
+
"*": deny # Everything else read-only
|
|
27
29
|
bash:
|
|
28
30
|
"*": deny
|
|
29
31
|
# Tests
|
|
@@ -116,10 +118,17 @@ permission:
|
|
|
116
118
|
<action>If failures → include in review report as HIGH priority</action>
|
|
117
119
|
</phase>
|
|
118
120
|
|
|
119
|
-
<phase name="6.
|
|
120
|
-
<action>
|
|
121
|
-
<action>
|
|
122
|
-
<action>
|
|
121
|
+
<phase name="6. Write to Story File">
|
|
122
|
+
<action>Append `### Review #N` block to the story file's `## Review` section (see code-review skill for format)</action>
|
|
123
|
+
<action>Determine N by counting existing `### Review #` blocks + 1</action>
|
|
124
|
+
<action>Include: verdict, summary, test/lint results, action items with file:line</action>
|
|
125
|
+
<critical>NEVER overwrite previous reviews — always APPEND. History is preserved for analytics.</critical>
|
|
126
|
+
</phase>
|
|
127
|
+
|
|
128
|
+
<phase name="7. Return Summary to Caller">
|
|
129
|
+
<action>Return SHORT summary so calling agent does NOT re-read the story file</action>
|
|
130
|
+
<action>Format: verdict + action items list (caller uses this directly)</action>
|
|
131
|
+
<critical>Caller (@dev) uses YOUR output, not the file. Keep it actionable.</critical>
|
|
123
132
|
</phase>
|
|
124
133
|
</workflow>
|
|
125
134
|
|
|
@@ -220,38 +229,33 @@ permission:
|
|
|
220
229
|
</category>
|
|
221
230
|
</review_checklist>
|
|
222
231
|
|
|
223
|
-
<output_format>
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
**
|
|
228
|
-
**
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
{{
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
### Action Items
|
|
252
|
-
- [ ] [HIGH] Fix {{issue}}
|
|
253
|
-
- [ ] [MED] Add {{test/improvement}}
|
|
254
|
-
</output_format>
|
|
232
|
+
<output_format hint="TWO outputs: file + return summary">
|
|
233
|
+
|
|
234
|
+
<file_output hint="Appended to story file ## Review section — full details for analytics">
|
|
235
|
+
### Review #{{N}} — {{YYYY-MM-DD}}
|
|
236
|
+
**Verdict:** {{APPROVE | CHANGES_REQUESTED | BLOCKED}}
|
|
237
|
+
**Reviewer:** @reviewer (Marcus)
|
|
238
|
+
**Summary:** {{1-2 sentences}}
|
|
239
|
+
**Tests:** {{PASS | FAIL — details}}
|
|
240
|
+
**Lint:** {{PASS | FAIL — details}}
|
|
241
|
+
#### Action Items (if CHANGES_REQUESTED/BLOCKED)
|
|
242
|
+
- [ ] [HIGH] `path/file.ts:42` — {{issue}} → Fix: {{fix}}
|
|
243
|
+
- [ ] [MED] `path/file.ts:100` — {{issue}} → Fix: {{fix}}
|
|
244
|
+
#### What's Good (if APPROVE)
|
|
245
|
+
- {{positive feedback}}
|
|
246
|
+
</file_output>
|
|
247
|
+
|
|
248
|
+
<return_summary hint="Returned to calling agent — short, actionable, NO re-read needed">
|
|
249
|
+
**VERDICT: {{APPROVE | CHANGES_REQUESTED | BLOCKED}}**
|
|
250
|
+
{{IF CHANGES_REQUESTED or BLOCKED:}}
|
|
251
|
+
Action items:
|
|
252
|
+
- [HIGH] `path/file.ts:42` — {{issue}} → {{fix}}
|
|
253
|
+
- [MED] `path/file.ts:100` — {{issue}} → {{fix}}
|
|
254
|
+
{{IF APPROVE:}}
|
|
255
|
+
All good. No issues found.
|
|
256
|
+
</return_summary>
|
|
257
|
+
|
|
258
|
+
</output_format>
|
|
255
259
|
|
|
256
260
|
</agent>
|
|
257
261
|
|
|
@@ -269,4 +273,7 @@ permission:
|
|
|
269
273
|
- Make architecture decisions (→ @architect)
|
|
270
274
|
- Write documentation (→ @pm)
|
|
271
275
|
|
|
276
|
+
**What I Write:**
|
|
277
|
+
- `## Review` section in story files (append history: Review #1, #2, ...)
|
|
278
|
+
|
|
272
279
|
**My Model:** GPT-5.2 Codex (best at finding bugs)
|
|
@@ -101,38 +101,82 @@ For each AC in the story:
|
|
|
101
101
|
|
|
102
102
|
All criteria met. Code is ready to merge.
|
|
103
103
|
|
|
104
|
-
```markdown
|
|
105
|
-
### Review Outcome: Approve
|
|
106
|
-
|
|
107
|
-
All acceptance criteria satisfied. Code follows project standards.
|
|
108
|
-
Ready for merge.
|
|
109
|
-
```
|
|
110
|
-
|
|
111
104
|
### 🔄 Changes Requested
|
|
112
105
|
|
|
113
106
|
Issues found that need addressing.
|
|
114
107
|
|
|
108
|
+
### ❌ Blocked
|
|
109
|
+
|
|
110
|
+
Major issues that prevent approval.
|
|
111
|
+
|
|
112
|
+
## Write Findings to Story File (MANDATORY)
|
|
113
|
+
|
|
114
|
+
After completing the review, **append** your findings to the story file's `## Review` section.
|
|
115
|
+
Each review round is a separate `### Review #N` block. NEVER overwrite previous reviews — always append.
|
|
116
|
+
|
|
117
|
+
**How to determine review number:**
|
|
118
|
+
1. Read the story file's `## Review` section
|
|
119
|
+
2. Count existing `### Review #N` blocks
|
|
120
|
+
3. Your review is `N + 1` (or `#1` if none exist)
|
|
121
|
+
|
|
122
|
+
**Format to append at the end of the story file:**
|
|
123
|
+
|
|
115
124
|
```markdown
|
|
116
|
-
### Review
|
|
125
|
+
### Review #{{N}} — {{YYYY-MM-DD}}
|
|
126
|
+
|
|
127
|
+
**Verdict:** {{APPROVE | CHANGES_REQUESTED | BLOCKED}}
|
|
128
|
+
**Reviewer:** @reviewer (Marcus)
|
|
129
|
+
|
|
130
|
+
**Summary:** {{1-2 sentences}}
|
|
131
|
+
|
|
132
|
+
**Tests:** {{PASS | FAIL — details}}
|
|
133
|
+
**Lint:** {{PASS | FAIL — details}}
|
|
117
134
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
- [ ] [
|
|
121
|
-
- [ ] [
|
|
135
|
+
{{IF issues found:}}
|
|
136
|
+
#### Action Items
|
|
137
|
+
- [ ] [HIGH] `path/file.ts:42` — {{issue}} → Fix: {{specific fix}}
|
|
138
|
+
- [ ] [MED] `path/file.ts:100` — {{issue}} → Fix: {{specific fix}}
|
|
139
|
+
- [ ] [LOW] `path/file.ts:15` — {{issue}}
|
|
140
|
+
|
|
141
|
+
{{IF approve:}}
|
|
142
|
+
#### What's Good
|
|
143
|
+
- {{positive feedback}}
|
|
122
144
|
```
|
|
123
145
|
|
|
124
|
-
|
|
146
|
+
**Example — first review with issues:**
|
|
125
147
|
|
|
126
|
-
|
|
148
|
+
```markdown
|
|
149
|
+
### Review #1 — 2026-01-27
|
|
150
|
+
|
|
151
|
+
**Verdict:** CHANGES_REQUESTED
|
|
152
|
+
**Reviewer:** @reviewer (Marcus)
|
|
153
|
+
|
|
154
|
+
**Summary:** Missing error handling in CreateUser handler, no test for duplicate email.
|
|
155
|
+
|
|
156
|
+
**Tests:** PASS (12/12)
|
|
157
|
+
**Lint:** PASS
|
|
158
|
+
|
|
159
|
+
#### Action Items
|
|
160
|
+
- [ ] [HIGH] `internal/user/handler.go:42` — No error handling for DB timeout → Fix: wrap with domain error
|
|
161
|
+
- [ ] [MED] `internal/user/handler_test.go` — Missing duplicate email test → Fix: add TestCreateUser_DuplicateEmail
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Example — second review after fixes:**
|
|
127
165
|
|
|
128
166
|
```markdown
|
|
129
|
-
### Review
|
|
167
|
+
### Review #2 — 2026-01-27
|
|
130
168
|
|
|
131
|
-
**
|
|
132
|
-
|
|
133
|
-
2. Missing critical test coverage
|
|
169
|
+
**Verdict:** APPROVE
|
|
170
|
+
**Reviewer:** @reviewer (Marcus)
|
|
134
171
|
|
|
135
|
-
|
|
172
|
+
**Summary:** All issues from Review #1 fixed. Error handling added, test coverage complete.
|
|
173
|
+
|
|
174
|
+
**Tests:** PASS (14/14)
|
|
175
|
+
**Lint:** PASS
|
|
176
|
+
|
|
177
|
+
#### What's Good
|
|
178
|
+
- Clean error wrapping with domain errors
|
|
179
|
+
- Good test coverage for edge cases
|
|
136
180
|
```
|
|
137
181
|
|
|
138
182
|
## Severity Levels
|
|
@@ -164,34 +208,9 @@ func foo() error { ... }
|
|
|
164
208
|
|
|
165
209
|
## Updating Story File
|
|
166
210
|
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
## Senior Developer Review (AI)
|
|
171
|
-
|
|
172
|
-
### Review Date
|
|
173
|
-
2024-01-15
|
|
174
|
-
|
|
175
|
-
### Review Outcome
|
|
176
|
-
Changes Requested
|
|
177
|
-
|
|
178
|
-
### Action Items
|
|
179
|
-
- [ ] [High] Add error handling to CreateUser handler
|
|
180
|
-
- [ ] [Med] Add unit test for duplicate email validation
|
|
181
|
-
- [ ] [Low] Rename 'x' to 'userCount'
|
|
182
|
-
|
|
183
|
-
### Detailed Comments
|
|
184
|
-
[Include detailed review comments here]
|
|
185
|
-
```
|
|
186
|
-
|
|
187
|
-
If changes requested, also add:
|
|
188
|
-
|
|
189
|
-
```markdown
|
|
190
|
-
### Review Follow-ups (AI)
|
|
191
|
-
|
|
192
|
-
- [ ] [AI-Review] [High] Add error handling to CreateUser handler
|
|
193
|
-
- [ ] [AI-Review] [Med] Add unit test for duplicate email validation
|
|
194
|
-
```
|
|
211
|
+
**MANDATORY:** Use the format from "Write Findings to Story File" section above.
|
|
212
|
+
Append `### Review #N` block to the `## Review` section at the end of the story file.
|
|
213
|
+
NEVER overwrite previous reviews — history must be preserved for analytics.
|
|
195
214
|
|
|
196
215
|
## Best Practices
|
|
197
216
|
|
|
@@ -95,9 +95,13 @@ metadata:
|
|
|
95
95
|
</action>
|
|
96
96
|
|
|
97
97
|
<action name="review-story">
|
|
98
|
-
Invoke @reviewer on story code
|
|
98
|
+
Invoke @reviewer on story code.
|
|
99
|
+
Reviewer does TWO things:
|
|
100
|
+
1. WRITES findings to story file (## Review → ### Review #N) — for history
|
|
101
|
+
2. RETURNS summary to you — use THIS, do NOT re-read story file
|
|
99
102
|
<if condition="CHANGES_REQUESTED">
|
|
100
|
-
|
|
103
|
+
Use reviewer's returned action items directly.
|
|
104
|
+
Create fix tasks from action items → execute → re-review (max 3 attempts).
|
|
101
105
|
</if>
|
|
102
106
|
<if condition="APPROVED">
|
|
103
107
|
Set story status: done
|
|
@@ -118,8 +118,11 @@ metadata:
|
|
|
118
118
|
<critical>Status flow: in_progress → review → done. NEVER skip review!</critical>
|
|
119
119
|
<step n="1">All tasks done → set story status: review</step>
|
|
120
120
|
<step n="2">Run all tests, verify AC</step>
|
|
121
|
-
<step n="3">If called from /dev-epic: invoke @reviewer
|
|
122
|
-
|
|
121
|
+
<step n="3">If called from /dev-epic: invoke @reviewer.
|
|
122
|
+
Reviewer does TWO things:
|
|
123
|
+
1. WRITES findings to story file (## Review → ### Review #N) — for history
|
|
124
|
+
2. RETURNS summary to you — use THIS, do NOT re-read story file</step>
|
|
125
|
+
<step n="4">If CHANGES_REQUESTED: use reviewer's returned action items directly → fix → re-review (max 3 attempts)</step>
|
|
123
126
|
<step n="5">Review passed → set story status: done</step>
|
|
124
127
|
<step n="6">Update .opencode/session-state.yaml</step>
|
|
125
128
|
</phase>
|
|
@@ -228,3 +228,11 @@ Before marking story as done, verify:
|
|
|
228
228
|
- [ ] Tests pass
|
|
229
229
|
- [ ] Code reviewed
|
|
230
230
|
- [ ] No lint errors
|
|
231
|
+
|
|
232
|
+
---
|
|
233
|
+
|
|
234
|
+
## Review
|
|
235
|
+
|
|
236
|
+
<!-- Reviewer (@reviewer) appends review rounds here. DO NOT edit manually.
|
|
237
|
+
Each review is appended as ### Review #N with verdict and action items.
|
|
238
|
+
History is preserved for analytics. -->
|