forge-workflow 0.0.4 → 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 -340
  2. package/.claude/commands/plan.md +521 -521
  3. package/.claude/commands/premerge.md +176 -176
  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 -164
  8. package/.claude/commands/sonarcloud.md +152 -152
  9. package/.claude/commands/status.md +48 -48
  10. package/.claude/commands/validate.md +282 -282
  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 -337
  17. package/.cline/workflows/plan.md +518 -518
  18. package/.cline/workflows/premerge.md +173 -173
  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 -161
  23. package/.cline/workflows/sonarcloud.md +146 -146
  24. package/.cline/workflows/status.md +45 -45
  25. package/.cline/workflows/validate.md +279 -279
  26. package/.cline/workflows/verify.md +218 -218
  27. package/.codex/config.toml +11 -11
  28. package/.codex/skills/dev/SKILL.md +340 -340
  29. package/.codex/skills/plan/SKILL.md +521 -521
  30. package/.codex/skills/premerge/SKILL.md +176 -176
  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 -164
  35. package/.codex/skills/sonarcloud/SKILL.md +149 -149
  36. package/.codex/skills/status/SKILL.md +48 -48
  37. package/.codex/skills/validate/SKILL.md +282 -282
  38. package/.codex/skills/verify/SKILL.md +221 -221
  39. package/.cursor/commands/dev.md +337 -337
  40. package/.cursor/commands/plan.md +518 -518
  41. package/.cursor/commands/premerge.md +173 -173
  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 -161
  46. package/.cursor/commands/sonarcloud.md +146 -146
  47. package/.cursor/commands/status.md +45 -45
  48. package/.cursor/commands/validate.md +279 -279
  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 -342
  54. package/.github/prompts/plan.prompt.md +523 -523
  55. package/.github/prompts/premerge.prompt.md +178 -178
  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 -166
  60. package/.github/prompts/sonarcloud.prompt.md +151 -151
  61. package/.github/prompts/status.prompt.md +50 -50
  62. package/.github/prompts/validate.prompt.md +284 -284
  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 -341
  67. package/.kilocode/workflows/plan.md +522 -522
  68. package/.kilocode/workflows/premerge.md +177 -177
  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 -165
  73. package/.kilocode/workflows/sonarcloud.md +150 -150
  74. package/.kilocode/workflows/status.md +49 -49
  75. package/.kilocode/workflows/validate.md +283 -283
  76. package/.kilocode/workflows/verify.md +222 -222
  77. package/.mcp.json.example +12 -12
  78. package/.opencode/commands/dev.md +340 -340
  79. package/.opencode/commands/plan.md +521 -521
  80. package/.opencode/commands/premerge.md +176 -176
  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 -164
  85. package/.opencode/commands/sonarcloud.md +149 -149
  86. package/.opencode/commands/status.md +48 -48
  87. package/.opencode/commands/validate.md +282 -282
  88. package/.opencode/commands/verify.md +221 -221
  89. package/.roo/commands/dev.md +341 -341
  90. package/.roo/commands/plan.md +522 -522
  91. package/.roo/commands/premerge.md +177 -177
  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 -165
  96. package/.roo/commands/sonarcloud.md +150 -150
  97. package/.roo/commands/status.md +49 -49
  98. package/.roo/commands/validate.md +283 -283
  99. package/.roo/commands/verify.md +222 -222
  100. package/AGENTS.md +175 -175
  101. package/CLAUDE.md +100 -100
  102. package/README.md +429 -416
  103. package/bin/forge-cmd.js +313 -313
  104. package/bin/forge-preflight.js +309 -309
  105. package/bin/forge.js +4596 -4303
  106. package/docs/AGENT_INSTALL_PROMPT.md +342 -342
  107. package/docs/BEADS_GITHUB_SYNC.md +251 -251
  108. package/docs/ENHANCED_ONBOARDING.md +602 -602
  109. package/docs/EXAMPLES.md +482 -482
  110. package/docs/GREPTILE_SETUP.md +400 -400
  111. package/docs/MANUAL_REVIEW_GUIDE.md +106 -106
  112. package/docs/ROADMAP.md +359 -359
  113. package/docs/SETUP.md +663 -631
  114. package/docs/TOOLCHAIN.md +630 -630
  115. package/docs/VALIDATION.md +363 -363
  116. package/install.sh +40 -1056
  117. package/lefthook.yml +39 -39
  118. package/lib/agents/README.md +198 -198
  119. package/lib/agents/claude.plugin.json +28 -28
  120. package/lib/agents/cline.plugin.json +22 -22
  121. package/lib/agents/codex.plugin.json +19 -19
  122. package/lib/agents/copilot.plugin.json +24 -24
  123. package/lib/agents/cursor.plugin.json +25 -25
  124. package/lib/agents/kilocode.plugin.json +22 -22
  125. package/lib/agents/opencode.plugin.json +20 -20
  126. package/lib/agents/roo.plugin.json +23 -23
  127. package/lib/agents-config.js +2112 -2112
  128. package/lib/beads-health-check.js +143 -0
  129. package/lib/beads-setup.js +341 -0
  130. package/lib/beads-sync-scaffold.js +260 -0
  131. package/lib/commands/dev.js +513 -513
  132. package/lib/commands/plan.js +692 -692
  133. package/lib/commands/recommend.js +119 -119
  134. package/lib/commands/ship.js +377 -377
  135. package/lib/commands/status.js +378 -378
  136. package/lib/commands/validate.js +602 -602
  137. package/lib/context-merge.js +359 -359
  138. package/lib/dep-guard/analyzer.js +294 -294
  139. package/lib/dep-guard/behavior-detector.js +98 -98
  140. package/lib/dep-guard/contract-detector.js +162 -162
  141. package/lib/dep-guard/import-detector.js +498 -498
  142. package/lib/dep-guard/path-utils.js +13 -13
  143. package/lib/dep-guard/rubric.js +120 -120
  144. package/lib/dep-guard/task-parser.js +318 -318
  145. package/lib/detect-agent.js +191 -191
  146. package/lib/detect-worktree.js +47 -47
  147. package/lib/file-hash.js +26 -26
  148. package/lib/husky-migration.js +450 -0
  149. package/lib/lefthook-check.js +65 -0
  150. package/lib/pat-setup.js +207 -0
  151. package/lib/plugin-catalog.js +350 -350
  152. package/lib/plugin-manager.js +166 -166
  153. package/lib/plugin-recommender.js +141 -141
  154. package/lib/project-discovery.js +491 -491
  155. package/lib/setup-action-log.js +139 -139
  156. package/lib/setup-summary-renderer.js +106 -106
  157. package/lib/setup-utils.js +96 -0
  158. package/lib/setup.js +192 -192
  159. package/lib/smart-merge.js +64 -0
  160. package/lib/symlink-utils.js +81 -0
  161. package/lib/workflow-profiles.js +197 -197
  162. package/package.json +131 -128
  163. package/scripts/beads-context.sh +291 -0
  164. package/scripts/beads-context.test.js +563 -0
  165. package/scripts/behavioral-judge.sh +378 -0
  166. package/scripts/benchmark.js +85 -0
  167. package/scripts/branch-protection.js +183 -0
  168. package/scripts/check-agents.js +172 -0
  169. package/scripts/commitlint.js +42 -0
  170. package/scripts/conflict-detect.sh +323 -0
  171. package/scripts/dep-guard-analyze.js +71 -0
  172. package/scripts/dep-guard.sh +811 -0
  173. package/scripts/eval_win.py +249 -0
  174. package/scripts/file-index.sh +399 -0
  175. package/scripts/github-beads-sync/comment.mjs +64 -0
  176. package/scripts/github-beads-sync/config.mjs +148 -0
  177. package/scripts/github-beads-sync/github-api.mjs +131 -0
  178. package/scripts/github-beads-sync/index.mjs +332 -0
  179. package/scripts/github-beads-sync/label-mapper.mjs +54 -0
  180. package/scripts/github-beads-sync/mapping.mjs +78 -0
  181. package/scripts/github-beads-sync/reverse-sync-cli.mjs +31 -0
  182. package/scripts/github-beads-sync/reverse-sync.mjs +138 -0
  183. package/scripts/github-beads-sync/run-bd.mjs +159 -0
  184. package/scripts/github-beads-sync/sanitize.mjs +121 -0
  185. package/scripts/github-beads-sync.config.json +26 -0
  186. package/scripts/improve-command.js +375 -0
  187. package/scripts/lib/eval-runner.js +229 -0
  188. package/scripts/lib/eval-schema.js +135 -0
  189. package/scripts/lib/eval-storage.js +78 -0
  190. package/scripts/lib/grading.js +203 -0
  191. package/scripts/lib/transcript-parser.js +63 -0
  192. package/scripts/lint.js +47 -0
  193. package/scripts/migrate-to-bun-test.js +412 -0
  194. package/scripts/run-command-eval.js +236 -0
  195. package/scripts/smart-status.sh +782 -0
  196. package/scripts/sync-commands.js +571 -0
  197. package/scripts/sync-utils.sh +460 -0
  198. package/scripts/test-dashboard.js +123 -0
  199. package/scripts/test.js +44 -0
  200. package/scripts/validate.sh +94 -0
  201. package/skills/parallel-deep-research/SKILL.md +108 -108
  202. package/skills/parallel-deep-research/evals/README.md +27 -27
  203. package/skills/parallel-deep-research/evals/evals.json +62 -62
  204. package/skills/sonarcloud-analysis/SKILL.md +171 -171
  205. package/skills/sonarcloud-analysis/evals/README.md +27 -27
  206. package/skills/sonarcloud-analysis/evals/evals.json +50 -50
  207. package/skills/sonarcloud-analysis/references/api-reference.md +466 -466
  208. package/.cursor/hooks/state/continual-learning-index.json +0 -19
  209. package/.cursor/hooks/state/continual-learning.json +0 -8
@@ -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