claude-dev-env 1.93.1 → 1.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (262) hide show
  1. package/_shared/advisor/CLAUDE.md +2 -2
  2. package/_shared/advisor/advisor-protocol.md +35 -27
  3. package/_shared/advisor/scripts/config/advisor_scripts_constants/model_tier_run_validator_constants.py +3 -2
  4. package/_shared/advisor/scripts/model_tier_run_validator.py +23 -15
  5. package/_shared/advisor/scripts/tests/test_model_tier_run_validator.py +81 -17
  6. package/_shared/pr-loop/CLAUDE.md +1 -0
  7. package/_shared/pr-loop/audit-contract.md +1 -1
  8. package/_shared/pr-loop/gh-payloads.md +3 -3
  9. package/_shared/pr-loop/post-audit-thread-contract.md +51 -0
  10. package/_shared/pr-loop/scripts/README.md +2 -2
  11. package/_shared/pr-loop/scripts/fix_hookspath.py +47 -12
  12. package/_shared/pr-loop/scripts/tests/test_code_rules_gate.py +0 -69
  13. package/_shared/pr-loop/scripts/tests/test_fix_hookspath.py +497 -374
  14. package/_shared/pr-loop/state-schema.md +3 -22
  15. package/bin/CLAUDE.md +11 -2
  16. package/bin/ever-shipped-skills.mjs +70 -0
  17. package/bin/install.mjs +138 -13
  18. package/bin/install.prune.test.mjs +457 -0
  19. package/bin/install.test.mjs +10 -4
  20. package/docs/CODE_RULES.md +1 -1
  21. package/hooks/blocking/CLAUDE.md +2 -0
  22. package/hooks/blocking/code_rules_enforcer.py +4 -0
  23. package/hooks/blocking/code_rules_shared.py +82 -0
  24. package/hooks/blocking/code_rules_test_layout.py +9 -3
  25. package/hooks/blocking/pii_commit_command.py +398 -0
  26. package/hooks/blocking/pii_payload_scan.py +133 -0
  27. package/hooks/blocking/pii_prevention_blocker.py +151 -449
  28. package/hooks/blocking/plain_language_blocker.py +138 -4
  29. package/hooks/blocking/sensitive_file_protector.py +114 -48
  30. package/hooks/blocking/tdd_enforcer.py +9 -2
  31. package/hooks/blocking/test_code_rules_enforcer_scratchpad.py +105 -0
  32. package/hooks/blocking/test_code_rules_shared.py +181 -0
  33. package/hooks/blocking/test_pii_prevention_blocker.py +299 -0
  34. package/hooks/blocking/test_plain_language_blocker_allowlist.py +184 -0
  35. package/hooks/blocking/test_sensitive_file_protector.py +185 -0
  36. package/hooks/blocking/test_tdd_enforcer_scratchpad.py +105 -0
  37. package/hooks/blocking/test_verdict_directory_write_blocker.py +42 -7
  38. package/hooks/hooks_constants/CLAUDE.md +4 -2
  39. package/hooks/hooks_constants/code_rules_path_utils_constants.py +0 -2
  40. package/hooks/hooks_constants/harness_scratchpad_constants.py +17 -0
  41. package/hooks/hooks_constants/local_identity.py +65 -15
  42. package/hooks/hooks_constants/pii_prevention_constants.py +16 -0
  43. package/hooks/hooks_constants/plain_language_blocker_constants.py +5 -0
  44. package/hooks/hooks_constants/pr_description_enforcer_constants.py +1 -1
  45. package/hooks/hooks_constants/sensitive_file_protector_constants.py +42 -0
  46. package/hooks/hooks_constants/test_local_identity.py +68 -0
  47. package/hooks/pyproject.toml +75 -4
  48. package/hooks/validators/CLAUDE.md +1 -1
  49. package/hooks/validators/README.md +2 -0
  50. package/hooks/validators/python_style_checks.py +114 -136
  51. package/hooks/validators/python_style_helpers.py +95 -0
  52. package/hooks/validators/test_python_style_checks.py +0 -164
  53. package/hooks/validators/test_python_style_checks_decorator_gap.py +119 -0
  54. package/hooks/validators/test_python_style_fixes.py +251 -0
  55. package/hooks/validators/test_python_style_helpers.py +125 -0
  56. package/package.json +1 -1
  57. package/rules/CLAUDE.md +1 -0
  58. package/rules/anti-corollary-tests.md +69 -0
  59. package/rules/bdd.md +1 -3
  60. package/rules/code-reviews.md +1 -1
  61. package/rules/gh-paginate.md +1 -1
  62. package/rules/plain-language.md +2 -0
  63. package/scripts/CLAUDE.md +10 -1
  64. package/scripts/Get-SessionAccount.ps1 +210 -0
  65. package/scripts/tests/CLAUDE.md +15 -1
  66. package/scripts/tests/Get-SessionAccount.Tests.ps1 +350 -0
  67. package/skills/CLAUDE.md +6 -27
  68. package/skills/anthropic-plan/SKILL.md +1 -13
  69. package/skills/autoconverge/CLAUDE.md +5 -2
  70. package/skills/autoconverge/SKILL.md +112 -387
  71. package/skills/autoconverge/reference/CLAUDE.md +4 -1
  72. package/skills/autoconverge/reference/closing-report.md +9 -2
  73. package/skills/autoconverge/reference/convergence.md +26 -22
  74. package/skills/autoconverge/reference/headless-safety.md +44 -0
  75. package/skills/autoconverge/reference/multi-pr.md +88 -0
  76. package/skills/autoconverge/reference/self-closing-loop.md +84 -0
  77. package/skills/autoconverge/reference/stop-conditions.md +21 -13
  78. package/skills/autoconverge/workflow/converge.clean-audit.test.mjs +87 -27
  79. package/skills/autoconverge/workflow/converge.contract.test.mjs +40 -10
  80. package/skills/autoconverge/workflow/converge.copilot-gate.test.mjs +179 -47
  81. package/skills/autoconverge/workflow/converge.fix-progress.test.mjs +1 -1
  82. package/skills/autoconverge/workflow/converge.mjs +286 -96
  83. package/skills/bugteam/CLAUDE.md +1 -1
  84. package/skills/bugteam/CONSTRAINTS.md +3 -3
  85. package/skills/bugteam/PROMPTS.md +8 -19
  86. package/skills/bugteam/SKILL.md +13 -14
  87. package/skills/bugteam/reference/CLAUDE.md +1 -1
  88. package/skills/bugteam/reference/README.md +2 -3
  89. package/skills/bugteam/reference/audit-and-teammates.md +2 -2
  90. package/skills/bugteam/reference/copilot-gap-analysis.md +2 -0
  91. package/skills/bugteam/reference/github-pr-reviews.md +56 -38
  92. package/skills/bugteam/reference/team-setup.md +11 -11
  93. package/skills/bugteam/scripts/CLAUDE.md +6 -6
  94. package/skills/bugteam/scripts/README.md +20 -8
  95. package/skills/bugteam/scripts/bugteam_code_rules_gate.py +13 -1463
  96. package/skills/bugteam/scripts/bugteam_fix_hookspath.py +23 -358
  97. package/skills/bugteam/scripts/bugteam_preflight.py +13 -315
  98. package/skills/bugteam/scripts/bugteam_scripts_constants/CLAUDE.md +2 -3
  99. package/skills/bugteam/scripts/test_bugteam_code_rules_gate.py +34 -1053
  100. package/skills/bugteam/scripts/test_bugteam_fix_hookspath.py +30 -347
  101. package/skills/bugteam/scripts/test_bugteam_preflight.py +30 -305
  102. package/skills/closeout/SKILL.md +153 -0
  103. package/skills/closeout/reference/handoff-prompt-template.md +72 -0
  104. package/skills/closeout/reference/issue-body-templates.md +108 -0
  105. package/skills/closeout/reference/pii-redaction-checklist.md +36 -0
  106. package/skills/copilot-finding-triage/SKILL.md +80 -28
  107. package/skills/copilot-finding-triage/reference/tier-rubric.md +70 -11
  108. package/skills/copilot-finding-triage/templates/notification.md +8 -3
  109. package/skills/everything-search/SKILL.md +1 -2
  110. package/skills/grokify/SKILL.md +58 -0
  111. package/skills/grokify/templates/handoff-template.md +92 -0
  112. package/skills/orchestrator/SKILL.md +35 -25
  113. package/skills/orchestrator-refresh/SKILL.md +15 -11
  114. package/skills/pr-converge/CLAUDE.md +1 -1
  115. package/skills/pr-converge/SKILL.md +132 -233
  116. package/skills/pr-converge/reference/convergence-gates.md +102 -66
  117. package/skills/pr-converge/reference/examples.md +37 -25
  118. package/skills/pr-converge/reference/fix-protocol.md +7 -7
  119. package/skills/pr-converge/reference/multi-pr-orchestration.md +10 -4
  120. package/skills/pr-converge/reference/per-tick.md +64 -41
  121. package/skills/pr-converge/reference/state-schema.md +27 -2
  122. package/skills/pr-converge/scripts/CLAUDE.md +8 -0
  123. package/skills/pr-converge/scripts/README.md +4 -3
  124. package/skills/pr-converge/scripts/_pr_converge_path_setup.py +23 -0
  125. package/skills/pr-converge/scripts/check_convergence.py +189 -645
  126. package/skills/pr-converge/scripts/check_convergence_gates.py +235 -0
  127. package/skills/pr-converge/scripts/check_convergence_thread_gates.py +219 -0
  128. package/skills/pr-converge/scripts/conftest.py +8 -0
  129. package/skills/pr-converge/scripts/pr_converge_scripts_constants/CLAUDE.md +1 -0
  130. package/skills/pr-converge/scripts/pr_converge_scripts_constants/convergence_gate_constants.py +36 -0
  131. package/skills/pr-converge/scripts/test__pr_converge_path_setup.py +26 -0
  132. package/skills/pr-converge/scripts/test_check_convergence.py +73 -228
  133. package/skills/pr-converge/scripts/test_check_convergence_contract.py +321 -0
  134. package/skills/pr-converge/scripts/test_check_convergence_gates.py +68 -0
  135. package/skills/pr-converge/scripts/test_check_convergence_thread_gates.py +75 -0
  136. package/skills/pr-fix-protocol/SKILL.md +20 -20
  137. package/skills/privacy-hygiene/SKILL.md +4 -3
  138. package/skills/reviewer-gates/SKILL.md +26 -8
  139. package/skills/session-log/SKILL.md +11 -12
  140. package/skills/session-tidy/SKILL.md +40 -30
  141. package/skills/skill-builder/CLAUDE.md +13 -10
  142. package/skills/skill-builder/SKILL.md +31 -31
  143. package/skills/skill-builder/references/CLAUDE.md +10 -6
  144. package/skills/skill-builder/references/delegation-map.md +13 -4
  145. package/skills/skill-builder/references/description-field.md +113 -0
  146. package/skills/skill-builder/references/self-audit-checklist.md +21 -4
  147. package/skills/skill-builder/references/skill-modularity.md +113 -0
  148. package/skills/skill-builder/references/skill-types.md +4 -0
  149. package/skills/skill-builder/templates/CLAUDE.md +4 -4
  150. package/skills/skill-builder/templates/gap-analysis.md +25 -1
  151. package/skills/skill-builder/workflows/CLAUDE.md +6 -4
  152. package/skills/skill-builder/workflows/improve-skill.md +17 -16
  153. package/skills/skill-builder/workflows/new-skill.md +34 -10
  154. package/skills/skill-builder/workflows/polish-skill.md +59 -43
  155. package/skills/team-advisor/SKILL.md +15 -11
  156. package/skills/usage-pause/SKILL.md +10 -14
  157. package/system-prompts/software-engineer.xml +7 -6
  158. package/hooks/validators/test_verify_paths.py +0 -32
  159. package/hooks/validators/verify_paths.py +0 -57
  160. package/skills/bdd-protocol/CLAUDE.md +0 -26
  161. package/skills/bdd-protocol/SKILL.md +0 -30
  162. package/skills/bdd-protocol/references/CLAUDE.md +0 -10
  163. package/skills/bdd-protocol/references/anti-patterns.md +0 -26
  164. package/skills/bdd-protocol/references/example-mapping.md +0 -23
  165. package/skills/bg-agent/CLAUDE.md +0 -17
  166. package/skills/bg-agent/SKILL.md +0 -69
  167. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_code_rules_gate_constants.py +0 -55
  168. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_fix_hookspath_constants.py +0 -26
  169. package/skills/bugteam/scripts/bugteam_scripts_constants/bugteam_preflight_constants.py +0 -35
  170. package/skills/caveman/CLAUDE.md +0 -15
  171. package/skills/caveman/SKILL.md +0 -38
  172. package/skills/code/CLAUDE.md +0 -17
  173. package/skills/code/SKILL.md +0 -178
  174. package/skills/deep-research/CLAUDE.md +0 -17
  175. package/skills/deep-research/SKILL.md +0 -80
  176. package/skills/findbugs/CLAUDE.md +0 -20
  177. package/skills/findbugs/SKILL.md +0 -241
  178. package/skills/fixbugs/CLAUDE.md +0 -19
  179. package/skills/fixbugs/SKILL.md +0 -142
  180. package/skills/gh-paginate/CLAUDE.md +0 -18
  181. package/skills/gh-paginate/SKILL.md +0 -84
  182. package/skills/gotcha/CLAUDE.md +0 -33
  183. package/skills/gotcha/SKILL.md +0 -73
  184. package/skills/implement/CLAUDE.md +0 -27
  185. package/skills/implement/SKILL.md +0 -66
  186. package/skills/implement/scripts/CLAUDE.md +0 -22
  187. package/skills/implement/scripts/append_note.py +0 -133
  188. package/skills/implement/scripts/implement_scripts_constants/CLAUDE.md +0 -22
  189. package/skills/implement/scripts/implement_scripts_constants/__init__.py +0 -0
  190. package/skills/implement/scripts/implement_scripts_constants/notes_constants.py +0 -12
  191. package/skills/implement/scripts/test_append_note.py +0 -191
  192. package/skills/log-audit/CLAUDE.md +0 -20
  193. package/skills/log-audit/SKILL.md +0 -66
  194. package/skills/log-audit/reference/CLAUDE.md +0 -9
  195. package/skills/log-audit/reference/charter.md +0 -52
  196. package/skills/log-audit/scripts/CLAUDE.md +0 -27
  197. package/skills/log-audit/scripts/cluster_recurrences.py +0 -261
  198. package/skills/log-audit/scripts/collect_log_window.py +0 -199
  199. package/skills/log-audit/scripts/log_audit_constants/CLAUDE.md +0 -12
  200. package/skills/log-audit/scripts/log_audit_constants/__init__.py +0 -0
  201. package/skills/log-audit/scripts/log_audit_constants/cluster_recurrences_constants.py +0 -23
  202. package/skills/log-audit/scripts/log_audit_constants/collect_log_window_constants.py +0 -24
  203. package/skills/log-audit/scripts/log_audit_constants/mine_copilot_findings_constants.py +0 -49
  204. package/skills/log-audit/scripts/mine_copilot_findings.py +0 -302
  205. package/skills/log-audit/scripts/test_cluster_recurrences.py +0 -160
  206. package/skills/log-audit/scripts/test_collect_log_window.py +0 -111
  207. package/skills/log-audit/scripts/test_mine_copilot_findings.py +0 -126
  208. package/skills/logifix/CLAUDE.md +0 -36
  209. package/skills/logifix/SKILL.md +0 -69
  210. package/skills/logifix/scripts/CLAUDE.md +0 -16
  211. package/skills/logifix/scripts/logifix.ps1 +0 -205
  212. package/skills/monitor-open-prs/CLAUDE.md +0 -34
  213. package/skills/monitor-open-prs/SKILL.md +0 -88
  214. package/skills/monitor-open-prs/scripts/CLAUDE.md +0 -17
  215. package/skills/monitor-open-prs/scripts/discover_open_prs.py +0 -69
  216. package/skills/monitor-open-prs/scripts/test_discover_open_prs.py +0 -149
  217. package/skills/monitor-open-prs/test_skill_contract.py +0 -27
  218. package/skills/post-audit-findings/SKILL.md +0 -80
  219. package/skills/pr-consistency-audit/CLAUDE.md +0 -34
  220. package/skills/pr-consistency-audit/SKILL.md +0 -116
  221. package/skills/pr-consistency-audit/reference/CLAUDE.md +0 -16
  222. package/skills/pr-consistency-audit/reference/detection-rules.md +0 -96
  223. package/skills/pr-consistency-audit/reference/illustrations.md +0 -78
  224. package/skills/pr-review-responder/CLAUDE.md +0 -35
  225. package/skills/pr-review-responder/EXAMPLES.md +0 -590
  226. package/skills/pr-review-responder/PRINCIPLES.md +0 -533
  227. package/skills/pr-review-responder/README.md +0 -168
  228. package/skills/pr-review-responder/SKILL.md +0 -203
  229. package/skills/pr-review-responder/TESTING.md +0 -350
  230. package/skills/pr-scope-resolve/SKILL.md +0 -45
  231. package/skills/pre-compact/CLAUDE.md +0 -24
  232. package/skills/pre-compact/SKILL.md +0 -134
  233. package/skills/qbug/CLAUDE.md +0 -40
  234. package/skills/qbug/SKILL.md +0 -387
  235. package/skills/qbug/test_qbug_skill_audit_schema.py +0 -152
  236. package/skills/qbug/test_qbug_skill_post_fix_audit.py +0 -103
  237. package/skills/refine/CLAUDE.md +0 -44
  238. package/skills/refine/SKILL.md +0 -262
  239. package/skills/refine/templates/CLAUDE.md +0 -17
  240. package/skills/refine/templates/implementation-notes-template.html +0 -56
  241. package/skills/refine/templates/plan-template.md +0 -60
  242. package/skills/research-mode/CLAUDE.md +0 -35
  243. package/skills/research-mode/SKILL.md +0 -53
  244. package/skills/structure-prompt/CLAUDE.md +0 -42
  245. package/skills/structure-prompt/SKILL.md +0 -44
  246. package/skills/structure-prompt/reference/CLAUDE.md +0 -28
  247. package/skills/structure-prompt/reference/adversarial-tuning.md +0 -62
  248. package/skills/structure-prompt/reference/block-classification.md +0 -27
  249. package/skills/structure-prompt/reference/canonical-case.md +0 -48
  250. package/skills/structure-prompt/reference/citation-depth.md +0 -70
  251. package/skills/structure-prompt/reference/cleanup.md +0 -33
  252. package/skills/structure-prompt/reference/constraints.md +0 -33
  253. package/skills/structure-prompt/reference/directives.md +0 -37
  254. package/skills/structure-prompt/reference/examples.md +0 -72
  255. package/skills/structure-prompt/reference/instantiation.md +0 -51
  256. package/skills/structure-prompt/reference/output-contract.md +0 -72
  257. package/skills/structure-prompt/reference/per-category.md +0 -23
  258. package/skills/structure-prompt/reference/persona.md +0 -38
  259. package/skills/structure-prompt/reference/research.md +0 -33
  260. package/skills/structure-prompt/reference/structure.md +0 -28
  261. package/skills/verified-build/CLAUDE.md +0 -33
  262. package/skills/verified-build/SKILL.md +0 -33
@@ -1,533 +0,0 @@
1
- # PR Review Response Principles
2
-
3
- Theory and best practices for responding to code review comments.
4
-
5
- ## Why Respond to Review Comments?
6
-
7
- ### Problem: Silent Fixes
8
-
9
- Common anti-pattern:
10
- 1. Reviewer leaves comments
11
- 2. Developer fixes issues
12
- 3. Developer pushes changes
13
- 4. Reviewer has to re-review entire PR to find what changed
14
- 5. Reviewer doesn't know if comments were addressed
15
-
16
- Result: **Wasted time, frustrated reviewers, slower feedback loops**
17
-
18
- ### Solution: Explicit Responses
19
-
20
- Better workflow:
21
- 1. Reviewer leaves comments
22
- 2. Developer fixes issues
23
- 3. Developer responds to each comment: "Fixed: [what changed]"
24
- 4. Developer pushes changes
25
- 5. Reviewer sees responses, knows what to re-check
26
- 6. Faster approval
27
-
28
- Result: **Clear communication, faster reviews, happy team**
29
-
30
- ## Principles of Good Review Responses
31
-
32
- ### Principle 1: Specificity Over Brevity
33
-
34
- **Bad**: "Fixed"
35
- **Good**: "Fixed: Renamed user_name to display_name"
36
-
37
- **Why**: Reviewer needs to know WHAT changed, not just that something changed.
38
-
39
- **Rule**: One sentence explaining the specific change made.
40
-
41
- ### Principle 2: Acknowledge, Don't Argue
42
-
43
- **Bad**: "The wrapper class provides better encapsulation though"
44
- **Good**: "Fixed: Removed wrapper, using Path().read_bytes()"
45
-
46
- **Why**: Code review is not a debate. If reviewer requested change, make it or discuss synchronously.
47
-
48
- **Rule**: Responses are for confirmation, not debate. Save discussions for meetings.
49
-
50
- ### Principle 3: Reviewer Can Verify
51
-
52
- **Bad**: "Updated the code"
53
- **Good**: "Fixed: Using select_related('profile') to eliminate N+1 query"
54
-
55
- **Why**: Reviewer needs to verify the fix. Specific details make this easy.
56
-
57
- **Rule**: Include enough detail for reviewer to quickly verify without deep code inspection.
58
-
59
- ### Principle 4: One Response Per Comment
60
-
61
- **Bad**: (One response for 3 different comments)
62
- **Good**: Individual response on each comment thread
63
-
64
- **Why**: GitHub organizes by comment threads. Keeps conversation context clear.
65
-
66
- **Rule**: Never combine responses to multiple comments.
67
-
68
- ### Principle 5: Respond Only to What You Changed
69
-
70
- **Bad**: Responding "Fixed" to every comment, even ones you didn't address
71
- **Good**: Only respond to comments where you made changes
72
-
73
- **Why**: False positives waste reviewer time. They check, find nothing changed, lose trust.
74
-
75
- **Rule**: Only post response if you actually modified the relevant code.
76
-
77
- ### Principle 6: Acknowledge Good Catches
78
-
79
- **Bad**: "Fixed: Using shared function"
80
- **Good**: "Fixed: Good catch! Using shared upload function now"
81
-
82
- **Why**: Positive reinforcement encourages thorough reviews. Shows gratitude.
83
-
84
- **Rule**: When reviewer finds a real issue, acknowledge it in your response.
85
-
86
- ### Principle 7: Keep It Short
87
-
88
- **Bad**: Multi-paragraph explanation of the architectural decision
89
- **Good**: One sentence stating what changed
90
-
91
- **Why**: Review responses are for confirmation, not documentation. Save details for code comments.
92
-
93
- **Rule**: Maximum one sentence. If you need more, the change needs discussion.
94
-
95
- ## Response Format Guide
96
-
97
- ### Standard Format
98
-
99
- ```
100
- ✅ **Fixed**: [concise description of change]
101
- ```
102
-
103
- **Components**:
104
- - ✅ checkmark: Visual confirmation, shows positive acknowledgment
105
- - **Fixed**: Bold keyword, makes it scannable in long threads
106
- - Concise description: What changed, not why (code/comments explain why)
107
-
108
- ### Variations
109
-
110
- **Cannot fix now** (rare):
111
- ```
112
- 📝 **Noted**: Will address in separate PR to avoid scope creep
113
- ```
114
-
115
- **Needs discussion** (use sparingly):
116
- ```
117
- ❓ **Question**: Should this be async or sync? Happy to discuss synchronously
118
- ```
119
-
120
- **Good catch acknowledgment**:
121
- ```
122
- ✅ **Fixed**: Good catch! [what changed]
123
- ```
124
-
125
- **Clarification needed** (ask, don't respond):
126
- ```
127
- ❓ Which shared function should I use here?
128
- ```
129
-
130
- ## Anti-Patterns to Avoid
131
-
132
- ### Anti-Pattern 1: Defending Your Original Code
133
-
134
- **Example**:
135
- ```
136
- Reviewer: "This wrapper class is unnecessary"
137
- You: "Actually, it provides better separation of concerns and follows
138
- the Single Responsibility Principle from SOLID..."
139
- ```
140
-
141
- **Why it's bad**:
142
- - Code review is not the place for architectural debates
143
- - Reviewer already reviewed and decided it's unnecessary
144
- - If you disagree, discuss synchronously (call/meeting)
145
- - Long async debates waste everyone's time
146
-
147
- **Better approach**:
148
- ```
149
- ✅ **Fixed**: Removed wrapper, using Path().read_bytes()
150
- ```
151
-
152
- If you STRONGLY disagree, discuss in person, then respond with outcome.
153
-
154
- ### Anti-Pattern 2: Vague Acknowledgments
155
-
156
- **Example**:
157
- ```
158
- Reviewer: "This causes N+1 queries"
159
- You: "Fixed"
160
- ```
161
-
162
- **Why it's bad**:
163
- - Reviewer doesn't know HOW you fixed it
164
- - Might have used wrong solution (prefetch vs select_related)
165
- - Requires re-review to verify
166
-
167
- **Better approach**:
168
- ```
169
- ✅ **Fixed**: Added select_related('profile') to eliminate N+1 query
170
- ```
171
-
172
- Now reviewer knows exactly what to check.
173
-
174
- ### Anti-Pattern 3: Over-Explaining in Responses
175
-
176
- **Example**:
177
- ```
178
- Reviewer: "Use the shared upload function"
179
- You: "I've refactored this to use the storage.upload_file()
180
- function which provides versioned filenames, calculates hashes from
181
- file contents, updates the filename map in storage, and is shared with
182
- the web upload interface following the DRY principle..."
183
- ```
184
-
185
- **Why it's bad**:
186
- - Too verbose for a review response
187
- - Details belong in code comments or commit messages
188
- - Wastes reviewer's time reading
189
-
190
- **Better approach**:
191
- ```
192
- ✅ **Fixed**: Using storage.upload_file()
193
- ```
194
-
195
- The code and commit message explain the rest.
196
-
197
- ### Anti-Pattern 4: Responding Before Fixing
198
-
199
- **Example**:
200
- ```
201
- Reviewer leaves comment → You respond "Will fix" → Days pass → Reviewer asks "Did you fix it?"
202
- ```
203
-
204
- **Why it's bad**:
205
- - "Will fix" is noise, not signal
206
- - Reviewer can't verify anything
207
- - Creates extra back-and-forth
208
-
209
- **Better approach**:
210
- ```
211
- Fix the code → Respond with "Fixed: [what changed]" → Push
212
- ```
213
-
214
- Only respond when done, not when planning.
215
-
216
- ### Anti-Pattern 5: Batch Responses on Unrelated Comments
217
-
218
- **Example**:
219
- ```
220
- Reviewer comments on 5 different issues
221
- You post one response: "Fixed all the issues you mentioned"
222
- ```
223
-
224
- **Why it's bad**:
225
- - Reviewer doesn't know which issues are fixed
226
- - No connection between comment and fix
227
- - Makes re-review difficult
228
-
229
- **Better approach**:
230
- ```
231
- Individual response on each of the 5 comment threads
232
- ```
233
-
234
- One-to-one mapping, clear context.
235
-
236
- ## GitHub Review Comment Types
237
-
238
- ### Type 1: Inline Code Comments
239
-
240
- **What**: Comments on specific lines of code
241
-
242
- **GitHub location**: File diffs, attached to specific line numbers
243
-
244
- **How to respond**:
245
- `add_reply_to_pull_request_comment(commentId={comment_id}, body="✅ **Fixed**: [description]", owner="{owner}", repo="{repo}", pullNumber={pr_number})`
246
-
247
- **Skill behavior**: Automatically detects and responds to these
248
-
249
- ### Type 2: General PR Comments
250
-
251
- **What**: Comments on the PR overall, not tied to code
252
-
253
- **GitHub location**: PR conversation tab
254
-
255
- **How to respond**:
256
- `add_issue_comment(owner=owner, repo=repo, issueNumber={pr_number}, body="✅ **Fixed**: [description]")`
257
-
258
- **Skill behavior**: Detects but cannot auto-respond (lacks line context)
259
-
260
- ### Type 3: Review Summary Comments
261
-
262
- **What**: Comments submitted as part of "Review changes" flow
263
-
264
- **GitHub location**: Part of a review submission
265
-
266
- **How to respond**: Reply to individual comments in the review
267
-
268
- **Skill behavior**: Treats these as inline comments
269
-
270
- ### Type 4: Threaded Conversations
271
-
272
- **What**: Back-and-forth discussion on a comment
273
-
274
- **GitHub location**: Nested under original comment
275
-
276
- **How to respond**: Add to the thread (same as inline comments)
277
-
278
- **Skill behavior**: Adds response at end of thread
279
-
280
- ## Timing and Workflow
281
-
282
- ### When to Respond
283
-
284
- **Best practice**: After fixing, before pushing
285
-
286
- **Workflow**:
287
- ```
288
- 1. Receive review feedback
289
- 2. Make code changes addressing feedback
290
- 3. Commit changes
291
- 4. Respond to review comments (this skill)
292
- 5. Push changes
293
- ```
294
-
295
- **Why**: Reviewer sees responses immediately when they get push notification.
296
-
297
- ### When NOT to Respond
298
-
299
- **Don't respond if**:
300
- - You haven't fixed the issue yet
301
- - Comment is a question (answer instead)
302
- - Comment needs discussion (discuss synchronously)
303
- - You disagree with the feedback (discuss first)
304
-
305
- ### Multiple Commits
306
-
307
- **Scenario**: Several commits addressing different comments
308
-
309
- **Approach**: Respond once after all commits
310
-
311
- **Workflow**:
312
- ```
313
- commit 1: Fix field names
314
- commit 2: Extract validation
315
- commit 3: Add docstrings
316
-
317
- Then: Respond to all comments at once
318
- Then: Push all commits
319
- ```
320
-
321
- **Why**: One batch of responses, one push notification, cleaner.
322
-
323
- ## Psychology of Review Responses
324
-
325
- ### Reviewer Perspective
326
-
327
- **What reviewers want**:
328
- - Clear confirmation of what changed
329
- - Easy verification (specific details)
330
- - Acknowledgment of their time investment
331
- - Fast feedback loop
332
-
333
- **What reviewers hate**:
334
- - Guessing if comments were addressed
335
- - Re-reviewing entire PR to find changes
336
- - Vague responses requiring follow-up
337
- - Defensive arguments
338
-
339
- ### Developer Perspective
340
-
341
- **Benefits of good responses**:
342
- - Faster PR approvals
343
- - Less back-and-forth
344
- - Better reviewer relationships
345
- - Clearer feedback loops
346
-
347
- **Costs of poor responses**:
348
- - Slower reviews
349
- - Frustrated reviewers
350
- - Longer PR lifetimes
351
- - Less thorough future reviews
352
-
353
- ## Cultural Context
354
-
355
- ### High-Trust Teams
356
-
357
- **Characteristic**: Reviewers trust developers to fix issues
358
-
359
- **Response style**: Brief confirmations
360
- ```
361
- ✅ **Fixed**: Using shared function
362
- ```
363
-
364
- ### Low-Trust or New Teams
365
-
366
- **Characteristic**: Need more detail to build confidence
367
-
368
- **Response style**: Slightly more detail
369
- ```
370
- ✅ **Fixed**: Using storage.upload_file() instead of boto3 directly
371
- ```
372
-
373
- ### Open Source
374
-
375
- **Characteristic**: Reviewers don't know you, need proof
376
-
377
- **Response style**: More context
378
- ```
379
- ✅ **Fixed**: Replaced custom uploader with storage.upload_file() (DRY)
380
- ```
381
-
382
- Adjust your response detail to your team's culture.
383
-
384
- ## Automation Benefits
385
-
386
- ### Manual Response Problems
387
-
388
- - Forget to respond to some comments
389
- - Inconsistent response format
390
- - Time-consuming to match comments to changes
391
- - Easy to miss comments in large PRs
392
-
393
- ### Automated Response Benefits
394
-
395
- - **Consistency**: Same format every time
396
- - **Completeness**: Never miss a comment
397
- - **Speed**: Seconds instead of minutes
398
- - **Accuracy**: Automatic matching of changes to comments
399
-
400
- ### When to Override Automation
401
-
402
- **Override if**:
403
- - Need to add context (unusual fix)
404
- - Want to acknowledge particularly good feedback
405
- - Change was complex, needs brief explanation
406
- - Disagreeing with reviewer (then discuss)
407
-
408
- ## Integration with Development Workflow
409
-
410
- ### TDD + Review Responses
411
-
412
- **Workflow**:
413
- ```
414
- 1. Write failing test (TDD)
415
- 2. Write minimal code to pass (TDD)
416
- 3. Commit
417
- 4. Create PR
418
- 5. Receive review feedback
419
- 6. Fix issues (maintaining TDD)
420
- 7. Respond to reviews (this skill)
421
- 8. Push
422
- ```
423
-
424
- ### CI/CD Integration
425
-
426
- **Opportunity**: Hook into CI/CD pipeline
427
-
428
- **Example**:
429
- ```yaml
430
- # .github/workflows/pr.yml
431
- on: pull_request_review_comment
432
-
433
- jobs:
434
- track-responses:
435
- runs-on: ubuntu-latest
436
- steps:
437
- - name: Check if all comments responded
438
- run: ./scripts/check_review_responses.sh
439
- ```
440
-
441
- ### Metrics
442
-
443
- **Track**:
444
- - Time from review to response
445
- - Percentage of comments with responses
446
- - Time from response to re-review
447
- - PR approval time
448
-
449
- **Goal**: Faster feedback loops, higher quality communication
450
-
451
- ## Advanced: Handling Difficult Situations
452
-
453
- ### Situation 1: Disagree with Reviewer
454
-
455
- **Wrong**:
456
- ```
457
- ❌ "I disagree, the wrapper provides better encapsulation"
458
- ```
459
-
460
- **Right**:
461
- ```
462
- 1. Discuss synchronously (call/Slack)
463
- 2. Agree on approach
464
- 3. Respond with: "Discussed offline, using [agreed approach]"
465
- ```
466
-
467
- ### Situation 2: Can't Fix in This PR
468
-
469
- **Wrong**:
470
- ```
471
- ❌ "Can't fix this now"
472
- ```
473
-
474
- **Right**:
475
- ```
476
- 📝 **Noted**: Will address in separate PR #124 (created) to avoid scope creep
477
- ```
478
-
479
- ### Situation 3: Comment is Actually Wrong
480
-
481
- **Wrong**:
482
- ```
483
- ❌ "Actually this doesn't cause N+1 queries because..."
484
- ```
485
-
486
- **Right**:
487
- ```
488
- 1. Politely explain in response
489
- 2. If reviewer still wants change, discuss synchronously
490
- 3. Either make the change or reach consensus
491
- ```
492
-
493
- ### Situation 4: Massive Refactor Requested
494
-
495
- **Wrong**:
496
- ```
497
- ❌ "That's a huge change, can't do it now"
498
- ```
499
-
500
- **Right**:
501
- ```
502
- 📝 **Noted**: Significant refactor, proposing we:
503
- 1. Merge this PR as-is (provides value)
504
- 2. Create issue #125 for refactor
505
- 3. Tackle in dedicated PR next sprint
506
-
507
- Thoughts?
508
- ```
509
-
510
- ## Summary
511
-
512
- **Core principles**:
513
- 1. Be specific (what changed)
514
- 2. Be concise (one sentence)
515
- 3. Acknowledge good feedback
516
- 4. Respond only to what you fixed
517
- 5. Make reviewer's job easy
518
-
519
- **Format**:
520
- ```
521
- ✅ **Fixed**: [specific change made]
522
- ```
523
-
524
- **Timing**:
525
- - After fixing, before pushing
526
-
527
- **Automation value**:
528
- - Consistency, completeness, speed
529
-
530
- **Result**:
531
- - Faster reviews, happier teams, better code
532
-
533
- Use the pr-review-responder skill to make this effortless.
@@ -1,168 +0,0 @@
1
- # PR Review Responder Skill
2
-
3
- Automatically find and respond to GitHub PR review comments before pushing code.
4
-
5
- ## What It Does
6
-
7
- This skill helps you:
8
- - Detect if your current branch has an open PR
9
- - Find unresponded review comments from reviewers
10
- - Match review comments to your recent code changes
11
- - Draft concise, specific responses (format: `✅ **Fixed**: [what changed]`)
12
- - Post responses directly to GitHub review comment threads
13
-
14
- ## When To Use
15
-
16
- Use this skill:
17
- - **Before every git push** when addressing PR feedback
18
- - After committing fixes to reviewer comments
19
- - When you want to notify reviewers what was addressed
20
- - To speed up PR review cycles
21
-
22
- ## Files in This Package
23
-
24
- - **SKILL.md**: Core instructions and step-by-step workflow for Claude
25
- - **EXAMPLES.md**: 8 real-world examples with different scenarios
26
- - **PRINCIPLES.md**: Theory and best practices for PR communication
27
- - **README.md**: This file
28
-
29
- ## Quick Start
30
-
31
- ### Using with Claude
32
-
33
- ```bash
34
- # 1. Make changes addressing PR feedback
35
- git add .
36
- git commit -m "fix: address PR feedback"
37
-
38
- # 2. Activate the skill
39
- "Respond to PR review comments"
40
-
41
- # 3. Skill finds comments, drafts responses, shows them for approval
42
- # 4. Confirm and push
43
- git push
44
- ```
45
-
46
- ## Testing
47
-
48
- Test the skill with these queries:
49
-
50
- **Should activate**:
51
- - "Respond to PR review comments"
52
- - "Reply to code review feedback before pushing"
53
- - "Find and respond to reviewer comments on my PR"
54
- - "Post responses to review comments"
55
-
56
- **Should NOT activate**:
57
- - "Create a new PR" (different skill)
58
- - "Review this code" (code review, not response)
59
- - "What are the PR comments?" (just viewing, not responding)
60
-
61
- ## Requirements
62
-
63
- - GitHub MCP server (`plugin:github:github`) authenticated
64
- - Git repository with GitHub remote
65
- - Current branch with an open PR
66
- - Changes committed (not just staged)
67
-
68
- ## Integration Options
69
-
70
- ### As Slash Command
71
-
72
- Add to `.claude/settings.json`:
73
- ```json
74
- {
75
- "commands": {
76
- "/respond": "Use pr-review-responder skill to respond to PR comments"
77
- }
78
- }
79
- ```
80
-
81
- Usage: `/respond`
82
-
83
- ## Example Response Format
84
-
85
- ```
86
- ✅ **Fixed**: Removed wrapper class, using Path().read_bytes() directly
87
- ✅ **Fixed**: Extracted upload logic to storage.upload_file()
88
- ✅ **Fixed**: Moved animation timing from Python context to CSS
89
- ✅ **Fixed**: Added type hints (int, str, Optional[Dict])
90
- 📝 **Noted**: Will refactor to service layer in separate PR
91
- ```
92
-
93
- ## Troubleshooting
94
-
95
- **"No PR found for this branch"**:
96
- - Create PR first using MCP: `create_pull_request(owner=owner, repo=repo, title=title, body=body, head=head, base=base)`
97
- - Ensure the branch has an associated open PR
98
-
99
- **"No review comments found"**:
100
- - PR might not have reviews yet
101
- - Or all comments already responded to
102
-
103
- **"Permission denied"**:
104
- - Ensure the GitHub MCP server has write-scoped authentication
105
- - Check repository write access
106
-
107
- **"Cannot find matching changes"**:
108
- - Review comments don't match files you modified
109
- - Check that you committed the changes
110
- - Comments might be on different files
111
-
112
- ## Best Practices
113
-
114
- 1. **Run before every push** - Make it part of your workflow
115
- 2. **Be specific** - Say what changed, not just "fixed"
116
- 3. **One response per comment** - Don't combine
117
- 4. **Acknowledge good catches** - "Good catch! Fixed by..."
118
- 5. **Keep it concise** - One sentence maximum
119
-
120
- ## Advanced Usage
121
-
122
- See [EXAMPLES.md](EXAMPLES.md) for:
123
- - Multiple commits addressing different comments
124
- - Partial addressing (some comments fixed, some deferred)
125
- - Handling conversation threads
126
- - Custom response editing
127
-
128
- See [PRINCIPLES.md](PRINCIPLES.md) for:
129
- - Theory on PR communication
130
- - Anti-patterns to avoid
131
- - Cultural context for different teams
132
- - Psychology of review responses
133
-
134
- ## Maintenance
135
-
136
- **Updating the skill**:
137
- 1. Modify SKILL.md for instruction changes
138
- 2. Add examples to EXAMPLES.md
139
- 3. Update principles in PRINCIPLES.md
140
- 4. Restart Claude Code to reload
141
-
142
- **Testing changes**:
143
- ```bash
144
- # Test skill activation
145
- "Respond to PR review comments"
146
- ```
147
-
148
- ## Version History
149
-
150
- **v1.0.0** (2025-01-14):
151
- - Initial release
152
- - Support for inline code review comments
153
- - Auto-detection of current PR
154
- - Matching changes to comments
155
- - Drafting responses with standard format
156
- - Posting via GitHub API
157
- - MCP-based GitHub tool integration
158
-
159
- ## Contributing
160
-
161
- To improve this skill:
162
- 1. Add new examples to EXAMPLES.md
163
- 2. Document anti-patterns in PRINCIPLES.md
164
- 3. Test with various PR scenarios
165
-
166
- ## License
167
-
168
- Part of the Claude Code skills library.