forge-workflow 0.0.3 → 0.0.5

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 (209) hide show
  1. package/.claude/commands/dev.md +340 -314
  2. package/.claude/commands/plan.md +521 -478
  3. package/.claude/commands/premerge.md +176 -179
  4. package/.claude/commands/research.md +42 -42
  5. package/.claude/commands/review.md +442 -442
  6. package/.claude/commands/rollback.md +721 -721
  7. package/.claude/commands/ship.md +164 -134
  8. package/.claude/commands/sonarcloud.md +152 -152
  9. package/.claude/commands/status.md +48 -77
  10. package/.claude/commands/validate.md +282 -237
  11. package/.claude/commands/verify.md +221 -221
  12. package/.claude/rules/greptile-review-process.md +285 -285
  13. package/.claude/rules/workflow.md +105 -105
  14. package/.claude/scripts/greptile-resolve.sh +526 -526
  15. package/.claude/scripts/load-env.sh +32 -32
  16. package/.cline/workflows/dev.md +337 -311
  17. package/.cline/workflows/plan.md +518 -475
  18. package/.cline/workflows/premerge.md +173 -176
  19. package/.cline/workflows/research.md +39 -39
  20. package/.cline/workflows/review.md +439 -439
  21. package/.cline/workflows/rollback.md +718 -718
  22. package/.cline/workflows/ship.md +161 -131
  23. package/.cline/workflows/sonarcloud.md +146 -146
  24. package/.cline/workflows/status.md +45 -74
  25. package/.cline/workflows/validate.md +279 -234
  26. package/.cline/workflows/verify.md +218 -218
  27. package/.codex/config.toml +11 -11
  28. package/.codex/skills/dev/SKILL.md +340 -314
  29. package/.codex/skills/plan/SKILL.md +521 -478
  30. package/.codex/skills/premerge/SKILL.md +176 -179
  31. package/.codex/skills/research/SKILL.md +42 -42
  32. package/.codex/skills/review/SKILL.md +442 -442
  33. package/.codex/skills/rollback/SKILL.md +721 -721
  34. package/.codex/skills/ship/SKILL.md +164 -134
  35. package/.codex/skills/sonarcloud/SKILL.md +149 -149
  36. package/.codex/skills/status/SKILL.md +48 -77
  37. package/.codex/skills/validate/SKILL.md +282 -237
  38. package/.codex/skills/verify/SKILL.md +221 -221
  39. package/.cursor/commands/dev.md +337 -311
  40. package/.cursor/commands/plan.md +518 -475
  41. package/.cursor/commands/premerge.md +173 -176
  42. package/.cursor/commands/research.md +39 -39
  43. package/.cursor/commands/review.md +439 -439
  44. package/.cursor/commands/rollback.md +718 -718
  45. package/.cursor/commands/ship.md +161 -131
  46. package/.cursor/commands/sonarcloud.md +146 -146
  47. package/.cursor/commands/status.md +45 -74
  48. package/.cursor/commands/validate.md +279 -234
  49. package/.cursor/commands/verify.md +218 -218
  50. package/.cursor/rules/permissions-guidance.mdc +37 -37
  51. package/.forge/hooks/check-tdd.js +240 -240
  52. package/.github/PLUGIN_TEMPLATE.json +32 -32
  53. package/.github/prompts/dev.prompt.md +342 -316
  54. package/.github/prompts/plan.prompt.md +523 -480
  55. package/.github/prompts/premerge.prompt.md +178 -181
  56. package/.github/prompts/research.prompt.md +44 -44
  57. package/.github/prompts/review.prompt.md +444 -444
  58. package/.github/prompts/rollback.prompt.md +723 -723
  59. package/.github/prompts/ship.prompt.md +166 -136
  60. package/.github/prompts/sonarcloud.prompt.md +151 -151
  61. package/.github/prompts/status.prompt.md +50 -79
  62. package/.github/prompts/validate.prompt.md +284 -239
  63. package/.github/prompts/verify.prompt.md +223 -223
  64. package/.github/workflows/beads-to-github.yml +56 -0
  65. package/.github/workflows/github-to-beads.yml +97 -0
  66. package/.kilocode/workflows/dev.md +341 -315
  67. package/.kilocode/workflows/plan.md +522 -479
  68. package/.kilocode/workflows/premerge.md +177 -180
  69. package/.kilocode/workflows/research.md +43 -43
  70. package/.kilocode/workflows/review.md +443 -443
  71. package/.kilocode/workflows/rollback.md +722 -722
  72. package/.kilocode/workflows/ship.md +165 -135
  73. package/.kilocode/workflows/sonarcloud.md +150 -150
  74. package/.kilocode/workflows/status.md +49 -78
  75. package/.kilocode/workflows/validate.md +283 -238
  76. package/.kilocode/workflows/verify.md +222 -222
  77. package/.mcp.json.example +12 -12
  78. package/.opencode/commands/dev.md +340 -314
  79. package/.opencode/commands/plan.md +521 -478
  80. package/.opencode/commands/premerge.md +176 -179
  81. package/.opencode/commands/research.md +42 -42
  82. package/.opencode/commands/review.md +442 -442
  83. package/.opencode/commands/rollback.md +721 -721
  84. package/.opencode/commands/ship.md +164 -134
  85. package/.opencode/commands/sonarcloud.md +149 -149
  86. package/.opencode/commands/status.md +48 -77
  87. package/.opencode/commands/validate.md +282 -237
  88. package/.opencode/commands/verify.md +221 -221
  89. package/.roo/commands/dev.md +341 -315
  90. package/.roo/commands/plan.md +522 -479
  91. package/.roo/commands/premerge.md +177 -180
  92. package/.roo/commands/research.md +43 -43
  93. package/.roo/commands/review.md +443 -443
  94. package/.roo/commands/rollback.md +722 -722
  95. package/.roo/commands/ship.md +165 -135
  96. package/.roo/commands/sonarcloud.md +150 -150
  97. package/.roo/commands/status.md +49 -78
  98. package/.roo/commands/validate.md +283 -238
  99. package/.roo/commands/verify.md +222 -222
  100. package/AGENTS.md +175 -169
  101. package/CLAUDE.md +100 -99
  102. package/LICENSE +21 -21
  103. package/README.md +429 -414
  104. package/bin/forge-cmd.js +313 -313
  105. package/bin/{forge-validate.js → forge-preflight.js} +309 -303
  106. package/bin/forge.js +4596 -4232
  107. package/docs/AGENT_INSTALL_PROMPT.md +342 -342
  108. package/docs/BEADS_GITHUB_SYNC.md +251 -0
  109. package/docs/ENHANCED_ONBOARDING.md +602 -602
  110. package/docs/EXAMPLES.md +482 -482
  111. package/docs/GREPTILE_SETUP.md +400 -400
  112. package/docs/MANUAL_REVIEW_GUIDE.md +106 -106
  113. package/docs/ROADMAP.md +359 -359
  114. package/docs/SETUP.md +663 -632
  115. package/docs/TOOLCHAIN.md +630 -630
  116. package/docs/VALIDATION.md +363 -363
  117. package/install.sh +40 -1058
  118. package/lefthook.yml +39 -39
  119. package/lib/agents/README.md +198 -198
  120. package/lib/agents/claude.plugin.json +28 -28
  121. package/lib/agents/cline.plugin.json +22 -22
  122. package/lib/agents/codex.plugin.json +19 -19
  123. package/lib/agents/copilot.plugin.json +24 -24
  124. package/lib/agents/cursor.plugin.json +25 -25
  125. package/lib/agents/kilocode.plugin.json +22 -22
  126. package/lib/agents/opencode.plugin.json +20 -20
  127. package/lib/agents/roo.plugin.json +23 -23
  128. package/lib/agents-config.js +2112 -2112
  129. package/lib/beads-health-check.js +143 -0
  130. package/lib/beads-setup.js +341 -0
  131. package/lib/beads-sync-scaffold.js +260 -0
  132. package/lib/commands/dev.js +513 -513
  133. package/lib/commands/plan.js +692 -692
  134. package/lib/commands/recommend.js +119 -119
  135. package/lib/commands/ship.js +377 -377
  136. package/lib/commands/status.js +378 -378
  137. package/lib/commands/validate.js +602 -602
  138. package/lib/context-merge.js +359 -359
  139. package/lib/dep-guard/analyzer.js +294 -294
  140. package/lib/dep-guard/behavior-detector.js +98 -98
  141. package/lib/dep-guard/contract-detector.js +162 -162
  142. package/lib/dep-guard/import-detector.js +498 -498
  143. package/lib/dep-guard/path-utils.js +13 -13
  144. package/lib/dep-guard/rubric.js +120 -120
  145. package/lib/dep-guard/task-parser.js +318 -318
  146. package/lib/detect-agent.js +191 -0
  147. package/lib/detect-worktree.js +47 -0
  148. package/lib/file-hash.js +26 -0
  149. package/lib/husky-migration.js +450 -0
  150. package/lib/lefthook-check.js +65 -0
  151. package/lib/pat-setup.js +207 -0
  152. package/lib/plugin-catalog.js +350 -350
  153. package/lib/plugin-manager.js +166 -166
  154. package/lib/plugin-recommender.js +141 -141
  155. package/lib/project-discovery.js +491 -491
  156. package/lib/setup-action-log.js +139 -0
  157. package/lib/setup-summary-renderer.js +106 -0
  158. package/lib/setup-utils.js +96 -0
  159. package/lib/setup.js +192 -118
  160. package/lib/smart-merge.js +64 -0
  161. package/lib/symlink-utils.js +81 -0
  162. package/lib/workflow-profiles.js +197 -197
  163. package/package.json +131 -129
  164. package/scripts/beads-context.sh +291 -0
  165. package/scripts/beads-context.test.js +563 -0
  166. package/scripts/behavioral-judge.sh +378 -0
  167. package/scripts/benchmark.js +85 -0
  168. package/scripts/branch-protection.js +183 -0
  169. package/scripts/check-agents.js +172 -0
  170. package/scripts/commitlint.js +42 -0
  171. package/scripts/conflict-detect.sh +323 -0
  172. package/scripts/dep-guard-analyze.js +71 -0
  173. package/scripts/dep-guard.sh +811 -0
  174. package/scripts/eval_win.py +249 -0
  175. package/scripts/file-index.sh +399 -0
  176. package/scripts/github-beads-sync/comment.mjs +64 -0
  177. package/scripts/github-beads-sync/config.mjs +148 -0
  178. package/scripts/github-beads-sync/github-api.mjs +131 -0
  179. package/scripts/github-beads-sync/index.mjs +332 -0
  180. package/scripts/github-beads-sync/label-mapper.mjs +54 -0
  181. package/scripts/github-beads-sync/mapping.mjs +78 -0
  182. package/scripts/github-beads-sync/reverse-sync-cli.mjs +31 -0
  183. package/scripts/github-beads-sync/reverse-sync.mjs +138 -0
  184. package/scripts/github-beads-sync/run-bd.mjs +159 -0
  185. package/scripts/github-beads-sync/sanitize.mjs +121 -0
  186. package/scripts/github-beads-sync.config.json +26 -0
  187. package/scripts/improve-command.js +375 -0
  188. package/scripts/lib/eval-runner.js +229 -0
  189. package/scripts/lib/eval-schema.js +135 -0
  190. package/scripts/lib/eval-storage.js +78 -0
  191. package/scripts/lib/grading.js +203 -0
  192. package/scripts/lib/transcript-parser.js +63 -0
  193. package/scripts/lint.js +47 -0
  194. package/scripts/migrate-to-bun-test.js +412 -0
  195. package/scripts/run-command-eval.js +236 -0
  196. package/scripts/smart-status.sh +782 -0
  197. package/scripts/sync-commands.js +571 -0
  198. package/scripts/sync-utils.sh +460 -0
  199. package/scripts/test-dashboard.js +123 -0
  200. package/scripts/test.js +44 -0
  201. package/scripts/validate.sh +94 -0
  202. package/skills/parallel-deep-research/SKILL.md +108 -108
  203. package/skills/parallel-deep-research/evals/README.md +27 -27
  204. package/skills/parallel-deep-research/evals/evals.json +62 -62
  205. package/skills/sonarcloud-analysis/SKILL.md +171 -171
  206. package/skills/sonarcloud-analysis/evals/README.md +27 -27
  207. package/skills/sonarcloud-analysis/evals/evals.json +50 -50
  208. package/skills/sonarcloud-analysis/references/api-reference.md +466 -466
  209. package/docs/WORKFLOW.md +0 -400
@@ -1,285 +1,285 @@
1
- # Greptile Review Handling Process
2
-
3
- **Purpose**: Standardized process for AI agents to systematically handle Greptile review comments.
4
-
5
- **Critical**: This process has been problematic for days. AI agents MUST follow these exact steps for EVERY Greptile comment.
6
-
7
- ---
8
-
9
- ## Problem Background
10
-
11
- **Previous Issues:**
12
- - ❌ AI agents replied to PR with general comments instead of replying directly to each Greptile review thread
13
- - ❌ AI agents didn't mark conversation threads as "resolved" after fixing issues
14
- - ❌ No systematic process for tracking which Greptile comments are addressed vs pending
15
- - ❌ Caused confusion and manual tracking overhead for maintainers
16
-
17
- **Why This Matters:**
18
- - Branch protection blocks merge when threads are unresolved
19
- - Maintainers must manually verify all issues are addressed
20
- - Inconsistent handling across different AI sessions
21
-
22
- ---
23
-
24
- ## Critical Distinction
25
-
26
- **Replying vs Resolving:**
27
-
28
- 1. **Replying** = Adding a comment to the review thread
29
- - Uses REST API: `/repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies`
30
- - Creates a threaded response within the review comment
31
- - Does NOT change the thread's resolved status
32
-
33
- 2. **Resolving** = Marking the thread as complete
34
- - Uses GraphQL API: `resolveReviewThread` mutation
35
- - Changes thread status to "Resolved"
36
- - Shows who resolved it and when
37
-
38
- **Both are required** by this project's workflow:
39
- - Reply explains what was fixed and why
40
- - Resolve marks the thread as addressed
41
-
42
- ---
43
-
44
- ## For AI Agents: Mandatory Steps
45
-
46
- When Greptile Quality Gate fails (score < 4/5) or when review comments exist:
47
-
48
- ### Step 1: List ALL Greptile Feedback (Inline + Direct Comments)
49
-
50
- Greptile posts feedback in **two places**:
51
- 1. **Inline review threads** — attached to specific code lines (resolvable via GraphQL)
52
- 2. **Direct PR issue comments** — "Additional Comments (N)" posted as regular PR comments (reply with `gh pr comment`)
53
-
54
- Always run `list-all` to see both:
55
-
56
- ```bash
57
- bash .claude/scripts/greptile-resolve.sh list-all <pr-number>
58
- ```
59
-
60
- Or just inline threads (unresolved only):
61
-
62
- ```bash
63
- bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
64
- ```
65
-
66
- **Output shows:**
67
- - Thread ID (for resolving inline threads)
68
- - Comment ID (for replying to inline threads)
69
- - File path and line number
70
- - Issue description
71
- - Direct PR comment IDs and previews (reply with `gh pr comment`)
72
-
73
- **Example:**
74
- ```
75
- ✗ UNRESOLVED | docs/ROADMAP.md:282
76
- Thread ID: PRRT_kwDORErEU85tuh6I
77
- Comment ID: 2787717459
78
- Author: greptile-apps
79
- Issue: Leaking local Windows paths
80
- ```
81
-
82
- ### Step 2: For EACH Unresolved Thread (Systematic)
83
-
84
- **Process each thread one at a time:**
85
-
86
- 1. **Read the comment** and understand the issue
87
- - Use the file path and line number to locate the code
88
- - Understand what Greptile is flagging
89
-
90
- 2. **Fix the issue** if the comment is valid
91
- - Make the necessary code changes
92
- - Commit the fix with a clear message
93
-
94
- 3. **Reply to the thread** with explanation
95
- ```bash
96
- bash .claude/scripts/greptile-resolve.sh reply <pr-number> <comment-id> "✅ Fixed: [description]
97
-
98
- Changed: [what was changed]
99
- Reason: [why this fixes the issue]
100
- Commit: [commit-sha]"
101
- ```
102
-
103
- 4. **Resolve the thread**
104
- ```bash
105
- bash .claude/scripts/greptile-resolve.sh resolve <pr-number> <thread-id>
106
- ```
107
-
108
- 5. **Track progress**: Mark comment as addressed in your notes
109
-
110
- **Alternative (all-in-one):**
111
- ```bash
112
- bash .claude/scripts/greptile-resolve.sh reply-and-resolve <pr-number> <comment-id> <thread-id> "✅ Fixed: [description]
113
-
114
- Changed: [what was changed]
115
- Reason: [why this fixes the issue]
116
- Commit: [commit-sha]"
117
- ```
118
-
119
- ### Step 3: Verify All Threads Resolved
120
-
121
- ```bash
122
- bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
123
- ```
124
-
125
- **Should show**: "No unresolved comments" or empty list
126
-
127
- **Confirm with stats:**
128
- ```bash
129
- bash .claude/scripts/greptile-resolve.sh stats <pr-number>
130
- ```
131
-
132
- **Should show**: "✓ All Greptile threads resolved!"
133
-
134
- ### Step 4: Push Changes & Wait for Re-review
135
-
136
- ```bash
137
- git push
138
- ```
139
-
140
- **Greptile will automatically:**
141
- - Re-analyze the PR
142
- - Update the confidence score
143
- - Re-run the Quality Gate check
144
-
145
- ---
146
-
147
- ## Example Workflow
148
-
149
- ```bash
150
- # 1. List unresolved threads
151
- $ bash .claude/scripts/greptile-resolve.sh list 24 --unresolved
152
-
153
- ✗ UNRESOLVED | docs/ROADMAP.md:280
154
- Thread ID: PRRT_kwDORErEU85tuh6I
155
- Comment ID: 2787717459
156
- Issue: Leaking local Windows paths
157
-
158
- # 2. Fix the issue (edit files, commit changes)
159
- $ git add docs/ROADMAP.md
160
- $ git commit -m "fix: replace Windows absolute paths with relative paths"
161
-
162
- # 3. Reply and resolve in one step
163
- $ bash .claude/scripts/greptile-resolve.sh reply-and-resolve 24 2787717459 PRRT_kwDORErEU85tuh6I \
164
- "✅ Fixed: Replaced Windows absolute paths with repo-relative paths
165
-
166
- Changed: C:\\Users\\...\\plans\\... → .claude/plans/*.md
167
- Reason: Absolute paths don't exist for other contributors
168
- Commit: abc123"
169
-
170
- ✅ Reply posted successfully
171
- ✅ Thread resolved successfully
172
-
173
- # 4. Verify all resolved
174
- $ bash .claude/scripts/greptile-resolve.sh stats 24
175
-
176
- Greptile unresolved: 0
177
- ✓ All Greptile threads resolved!
178
-
179
- # 5. Push changes
180
- $ git push
181
- ```
182
-
183
- ---
184
-
185
- ## Critical Rules
186
-
187
- ### ✅ DO:
188
- - **Reply to EACH comment thread** using the script (not as separate PR comment)
189
- - **Mark EACH thread as resolved** after fixing using the script
190
- - **Track progress** (X of Y fixed) in your notes
191
- - **Wait for Greptile re-review** after pushing fixes
192
- - **Use comment ID for replies**, thread ID for resolving
193
- - **Commit fixes BEFORE replying** so you can reference commit SHA
194
-
195
- ### ❌ DON'T:
196
- - Post general PR comments about fixes (use threaded replies)
197
- - Assume threads are auto-resolved (they're not)
198
- - Skip replying to threads (explain what you fixed)
199
- - Make multiple commits without resolving threads between them
200
- - Reply without actually fixing the issue
201
- - Resolve threads that haven't been fixed yet
202
-
203
- ---
204
-
205
- ## Script Commands Reference
206
-
207
- ### List Threads
208
- ```bash
209
- # All threads
210
- bash .claude/scripts/greptile-resolve.sh list <pr-number>
211
-
212
- # Only unresolved
213
- bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
214
- ```
215
-
216
- ### Reply to Thread
217
- ```bash
218
- bash .claude/scripts/greptile-resolve.sh reply <pr-number> <comment-id> "<message>"
219
- ```
220
-
221
- ### Resolve Thread
222
- ```bash
223
- bash .claude/scripts/greptile-resolve.sh resolve <pr-number> <thread-id>
224
- ```
225
-
226
- ### Reply and Resolve (Recommended)
227
- ```bash
228
- bash .claude/scripts/greptile-resolve.sh reply-and-resolve <pr-number> <comment-id> <thread-id> "<message>"
229
- ```
230
-
231
- ### Batch Resolve (After all issues fixed)
232
- ```bash
233
- bash .claude/scripts/greptile-resolve.sh resolve-all <pr-number>
234
- ```
235
- **⚠️ Warning**: Only use after ALL issues are fixed and replied to
236
-
237
- ### Statistics
238
- ```bash
239
- bash .claude/scripts/greptile-resolve.sh stats <pr-number>
240
- ```
241
-
242
- ---
243
-
244
- ## Integration with `/review` Command
245
-
246
- The `/review` command should now include these steps:
247
-
248
- 1. Run `/review` as usual to analyze PR feedback
249
- 2. For Greptile comments, use the script to:
250
- - List unresolved threads
251
- - Fix each issue
252
- - Reply and resolve systematically
253
- 3. Verify all threads resolved before declaring review complete
254
- 4. Push changes and wait for Greptile re-review
255
-
256
- ---
257
-
258
- ## Troubleshooting
259
-
260
- ### Script fails with "404 Not Found"
261
- **Cause**: Comment ID or thread ID is incorrect
262
- **Solution**: Re-run `list` command to get correct IDs
263
-
264
- ### Reply appears as separate PR comment
265
- **Cause**: Using wrong API endpoint
266
- **Solution**: Script handles this automatically, don't manually comment
267
-
268
- ### Thread not showing as resolved after script
269
- **Cause**: GitHub UI caching
270
- **Solution**: Refresh page, or check with GraphQL query
271
-
272
- ### Greptile score not updating after fixes
273
- **Cause**: Must push commits to trigger re-analysis
274
- **Solution**: `git push` and wait 2-3 minutes for Greptile re-scan
275
-
276
- ---
277
-
278
- ## Success Criteria
279
-
280
- **A review is complete when:**
281
- - ✅ All Greptile threads are resolved (verified with `stats` command)
282
- - ✅ All threads have replies explaining fixes
283
- - ✅ Greptile Quality Gate passes (≥4/5 score)
284
- - ✅ Branch protection allows merge
285
- - ✅ No manual tracking needed by maintainers
1
+ # Greptile Review Handling Process
2
+
3
+ **Purpose**: Standardized process for AI agents to systematically handle Greptile review comments.
4
+
5
+ **Critical**: This process has been problematic for days. AI agents MUST follow these exact steps for EVERY Greptile comment.
6
+
7
+ ---
8
+
9
+ ## Problem Background
10
+
11
+ **Previous Issues:**
12
+ - ❌ AI agents replied to PR with general comments instead of replying directly to each Greptile review thread
13
+ - ❌ AI agents didn't mark conversation threads as "resolved" after fixing issues
14
+ - ❌ No systematic process for tracking which Greptile comments are addressed vs pending
15
+ - ❌ Caused confusion and manual tracking overhead for maintainers
16
+
17
+ **Why This Matters:**
18
+ - Branch protection blocks merge when threads are unresolved
19
+ - Maintainers must manually verify all issues are addressed
20
+ - Inconsistent handling across different AI sessions
21
+
22
+ ---
23
+
24
+ ## Critical Distinction
25
+
26
+ **Replying vs Resolving:**
27
+
28
+ 1. **Replying** = Adding a comment to the review thread
29
+ - Uses REST API: `/repos/{owner}/{repo}/pulls/{pr}/comments/{comment_id}/replies`
30
+ - Creates a threaded response within the review comment
31
+ - Does NOT change the thread's resolved status
32
+
33
+ 2. **Resolving** = Marking the thread as complete
34
+ - Uses GraphQL API: `resolveReviewThread` mutation
35
+ - Changes thread status to "Resolved"
36
+ - Shows who resolved it and when
37
+
38
+ **Both are required** by this project's workflow:
39
+ - Reply explains what was fixed and why
40
+ - Resolve marks the thread as addressed
41
+
42
+ ---
43
+
44
+ ## For AI Agents: Mandatory Steps
45
+
46
+ When Greptile Quality Gate fails (score < 4/5) or when review comments exist:
47
+
48
+ ### Step 1: List ALL Greptile Feedback (Inline + Direct Comments)
49
+
50
+ Greptile posts feedback in **two places**:
51
+ 1. **Inline review threads** — attached to specific code lines (resolvable via GraphQL)
52
+ 2. **Direct PR issue comments** — "Additional Comments (N)" posted as regular PR comments (reply with `gh pr comment`)
53
+
54
+ Always run `list-all` to see both:
55
+
56
+ ```bash
57
+ bash .claude/scripts/greptile-resolve.sh list-all <pr-number>
58
+ ```
59
+
60
+ Or just inline threads (unresolved only):
61
+
62
+ ```bash
63
+ bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
64
+ ```
65
+
66
+ **Output shows:**
67
+ - Thread ID (for resolving inline threads)
68
+ - Comment ID (for replying to inline threads)
69
+ - File path and line number
70
+ - Issue description
71
+ - Direct PR comment IDs and previews (reply with `gh pr comment`)
72
+
73
+ **Example:**
74
+ ```
75
+ ✗ UNRESOLVED | docs/ROADMAP.md:282
76
+ Thread ID: PRRT_kwDORErEU85tuh6I
77
+ Comment ID: 2787717459
78
+ Author: greptile-apps
79
+ Issue: Leaking local Windows paths
80
+ ```
81
+
82
+ ### Step 2: For EACH Unresolved Thread (Systematic)
83
+
84
+ **Process each thread one at a time:**
85
+
86
+ 1. **Read the comment** and understand the issue
87
+ - Use the file path and line number to locate the code
88
+ - Understand what Greptile is flagging
89
+
90
+ 2. **Fix the issue** if the comment is valid
91
+ - Make the necessary code changes
92
+ - Commit the fix with a clear message
93
+
94
+ 3. **Reply to the thread** with explanation
95
+ ```bash
96
+ bash .claude/scripts/greptile-resolve.sh reply <pr-number> <comment-id> "✅ Fixed: [description]
97
+
98
+ Changed: [what was changed]
99
+ Reason: [why this fixes the issue]
100
+ Commit: [commit-sha]"
101
+ ```
102
+
103
+ 4. **Resolve the thread**
104
+ ```bash
105
+ bash .claude/scripts/greptile-resolve.sh resolve <pr-number> <thread-id>
106
+ ```
107
+
108
+ 5. **Track progress**: Mark comment as addressed in your notes
109
+
110
+ **Alternative (all-in-one):**
111
+ ```bash
112
+ bash .claude/scripts/greptile-resolve.sh reply-and-resolve <pr-number> <comment-id> <thread-id> "✅ Fixed: [description]
113
+
114
+ Changed: [what was changed]
115
+ Reason: [why this fixes the issue]
116
+ Commit: [commit-sha]"
117
+ ```
118
+
119
+ ### Step 3: Verify All Threads Resolved
120
+
121
+ ```bash
122
+ bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
123
+ ```
124
+
125
+ **Should show**: "No unresolved comments" or empty list
126
+
127
+ **Confirm with stats:**
128
+ ```bash
129
+ bash .claude/scripts/greptile-resolve.sh stats <pr-number>
130
+ ```
131
+
132
+ **Should show**: "✓ All Greptile threads resolved!"
133
+
134
+ ### Step 4: Push Changes & Wait for Re-review
135
+
136
+ ```bash
137
+ git push
138
+ ```
139
+
140
+ **Greptile will automatically:**
141
+ - Re-analyze the PR
142
+ - Update the confidence score
143
+ - Re-run the Quality Gate check
144
+
145
+ ---
146
+
147
+ ## Example Workflow
148
+
149
+ ```bash
150
+ # 1. List unresolved threads
151
+ $ bash .claude/scripts/greptile-resolve.sh list 24 --unresolved
152
+
153
+ ✗ UNRESOLVED | docs/ROADMAP.md:280
154
+ Thread ID: PRRT_kwDORErEU85tuh6I
155
+ Comment ID: 2787717459
156
+ Issue: Leaking local Windows paths
157
+
158
+ # 2. Fix the issue (edit files, commit changes)
159
+ $ git add docs/ROADMAP.md
160
+ $ git commit -m "fix: replace Windows absolute paths with relative paths"
161
+
162
+ # 3. Reply and resolve in one step
163
+ $ bash .claude/scripts/greptile-resolve.sh reply-and-resolve 24 2787717459 PRRT_kwDORErEU85tuh6I \
164
+ "✅ Fixed: Replaced Windows absolute paths with repo-relative paths
165
+
166
+ Changed: C:\\Users\\...\\plans\\... → .claude/plans/*.md
167
+ Reason: Absolute paths don't exist for other contributors
168
+ Commit: abc123"
169
+
170
+ ✅ Reply posted successfully
171
+ ✅ Thread resolved successfully
172
+
173
+ # 4. Verify all resolved
174
+ $ bash .claude/scripts/greptile-resolve.sh stats 24
175
+
176
+ Greptile unresolved: 0
177
+ ✓ All Greptile threads resolved!
178
+
179
+ # 5. Push changes
180
+ $ git push
181
+ ```
182
+
183
+ ---
184
+
185
+ ## Critical Rules
186
+
187
+ ### ✅ DO:
188
+ - **Reply to EACH comment thread** using the script (not as separate PR comment)
189
+ - **Mark EACH thread as resolved** after fixing using the script
190
+ - **Track progress** (X of Y fixed) in your notes
191
+ - **Wait for Greptile re-review** after pushing fixes
192
+ - **Use comment ID for replies**, thread ID for resolving
193
+ - **Commit fixes BEFORE replying** so you can reference commit SHA
194
+
195
+ ### ❌ DON'T:
196
+ - Post general PR comments about fixes (use threaded replies)
197
+ - Assume threads are auto-resolved (they're not)
198
+ - Skip replying to threads (explain what you fixed)
199
+ - Make multiple commits without resolving threads between them
200
+ - Reply without actually fixing the issue
201
+ - Resolve threads that haven't been fixed yet
202
+
203
+ ---
204
+
205
+ ## Script Commands Reference
206
+
207
+ ### List Threads
208
+ ```bash
209
+ # All threads
210
+ bash .claude/scripts/greptile-resolve.sh list <pr-number>
211
+
212
+ # Only unresolved
213
+ bash .claude/scripts/greptile-resolve.sh list <pr-number> --unresolved
214
+ ```
215
+
216
+ ### Reply to Thread
217
+ ```bash
218
+ bash .claude/scripts/greptile-resolve.sh reply <pr-number> <comment-id> "<message>"
219
+ ```
220
+
221
+ ### Resolve Thread
222
+ ```bash
223
+ bash .claude/scripts/greptile-resolve.sh resolve <pr-number> <thread-id>
224
+ ```
225
+
226
+ ### Reply and Resolve (Recommended)
227
+ ```bash
228
+ bash .claude/scripts/greptile-resolve.sh reply-and-resolve <pr-number> <comment-id> <thread-id> "<message>"
229
+ ```
230
+
231
+ ### Batch Resolve (After all issues fixed)
232
+ ```bash
233
+ bash .claude/scripts/greptile-resolve.sh resolve-all <pr-number>
234
+ ```
235
+ **⚠️ Warning**: Only use after ALL issues are fixed and replied to
236
+
237
+ ### Statistics
238
+ ```bash
239
+ bash .claude/scripts/greptile-resolve.sh stats <pr-number>
240
+ ```
241
+
242
+ ---
243
+
244
+ ## Integration with `/review` Command
245
+
246
+ The `/review` command should now include these steps:
247
+
248
+ 1. Run `/review` as usual to analyze PR feedback
249
+ 2. For Greptile comments, use the script to:
250
+ - List unresolved threads
251
+ - Fix each issue
252
+ - Reply and resolve systematically
253
+ 3. Verify all threads resolved before declaring review complete
254
+ 4. Push changes and wait for Greptile re-review
255
+
256
+ ---
257
+
258
+ ## Troubleshooting
259
+
260
+ ### Script fails with "404 Not Found"
261
+ **Cause**: Comment ID or thread ID is incorrect
262
+ **Solution**: Re-run `list` command to get correct IDs
263
+
264
+ ### Reply appears as separate PR comment
265
+ **Cause**: Using wrong API endpoint
266
+ **Solution**: Script handles this automatically, don't manually comment
267
+
268
+ ### Thread not showing as resolved after script
269
+ **Cause**: GitHub UI caching
270
+ **Solution**: Refresh page, or check with GraphQL query
271
+
272
+ ### Greptile score not updating after fixes
273
+ **Cause**: Must push commits to trigger re-analysis
274
+ **Solution**: `git push` and wait 2-3 minutes for Greptile re-scan
275
+
276
+ ---
277
+
278
+ ## Success Criteria
279
+
280
+ **A review is complete when:**
281
+ - ✅ All Greptile threads are resolved (verified with `stats` command)
282
+ - ✅ All threads have replies explaining fixes
283
+ - ✅ Greptile Quality Gate passes (≥4/5 score)
284
+ - ✅ Branch protection allows merge
285
+ - ✅ No manual tracking needed by maintainers