dsh-superpower 6.3.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.
- package/LICENSE +22 -0
- package/README.md +334 -0
- package/cordis.patch.yml +3 -0
- package/lib/superpowers.d.ts +44 -0
- package/lib/superpowers.d.ts.map +1 -0
- package/lib/superpowers.js +291 -0
- package/lib/superpowers.js.map +1 -0
- package/package.json +62 -0
- package/skills/brainstorming/SKILL.md +207 -0
- package/skills/brainstorming/scripts/frame-template.html +213 -0
- package/skills/brainstorming/scripts/helper.js +167 -0
- package/skills/brainstorming/scripts/server.cjs +723 -0
- package/skills/brainstorming/scripts/start-server.sh +209 -0
- package/skills/brainstorming/scripts/stop-server.sh +120 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +47 -0
- package/skills/brainstorming/visual-companion.md +293 -0
- package/skills/dispatching-parallel-agents/SKILL.md +167 -0
- package/skills/executing-plans/SKILL.md +64 -0
- package/skills/finishing-a-development-branch/SKILL.md +202 -0
- package/skills/receiving-code-review/SKILL.md +205 -0
- package/skills/requesting-code-review/SKILL.md +95 -0
- package/skills/requesting-code-review/code-reviewer.md +169 -0
- package/skills/subagent-driven-development/SKILL.md +347 -0
- package/skills/subagent-driven-development/implementer-prompt.md +133 -0
- package/skills/subagent-driven-development/re-review-prompt.md +84 -0
- package/skills/subagent-driven-development/scripts/review-package +46 -0
- package/skills/subagent-driven-development/scripts/sdd-workspace +40 -0
- package/skills/subagent-driven-development/scripts/task-brief +41 -0
- package/skills/subagent-driven-development/task-reviewer-prompt.md +129 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +283 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +116 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +72 -0
- package/skills/systematic-debugging/root-cause-tracing.md +169 -0
- package/skills/systematic-debugging/test-academic.md +14 -0
- package/skills/systematic-debugging/test-pressure-1.md +58 -0
- package/skills/systematic-debugging/test-pressure-2.md +68 -0
- package/skills/systematic-debugging/test-pressure-3.md +69 -0
- package/skills/test-driven-development/SKILL.md +322 -0
- package/skills/test-driven-development/writing-good-tests.md +145 -0
- package/skills/using-git-worktrees/SKILL.md +167 -0
- package/skills/using-superpowers/SKILL.md +64 -0
- package/skills/using-superpowers/references/antigravity-tools.md +23 -0
- package/skills/using-superpowers/references/codex-tools.md +108 -0
- package/skills/using-superpowers/references/dsh-tools.md +47 -0
- package/skills/using-superpowers/references/gemini-tools.md +63 -0
- package/skills/using-superpowers/references/hermes-tools.md +56 -0
- package/skills/using-superpowers/references/pi-tools.md +16 -0
- package/skills/verification-before-completion/SKILL.md +120 -0
- package/skills/writing-plans/SKILL.md +160 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/writing-skills/SKILL.md +679 -0
- package/skills/writing-skills/anthropic-best-practices.md +1146 -0
- package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +188 -0
- package/skills/writing-skills/graphviz-conventions.dot +172 -0
- package/skills/writing-skills/persuasion-principles.md +187 -0
- package/skills/writing-skills/render-graphs.js +169 -0
- package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dispatching-parallel-agents
|
|
3
|
+
description: "面向 2 个以上无共享状态、无前后依赖的独立任务,并行委派多个子智能体协同处理的高效分发模式"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 并行分发智能体
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
你将任务委派给拥有隔离上下文的专用智能体。通过精确构造指令与上下文,确保它们保持专注并成功完成任务。它们不应继承你当前会话的上下文或历史——你需要按需精确构造所需信息。这也能保留你自身的上下文,用于统筹协调工作。
|
|
11
|
+
|
|
12
|
+
当存在多个互不相关的失败时(不同的测试文件、不同的子系统、不同的缺陷),串行排查会浪费大量时间。每一项排查都是独立的,可以并行进行。
|
|
13
|
+
|
|
14
|
+
**核心原则:** 每个独立的问题域分派一个智能体,让它们并发执行。
|
|
15
|
+
|
|
16
|
+
## 何时使用
|
|
17
|
+
|
|
18
|
+
```dot
|
|
19
|
+
digraph when_to_use {
|
|
20
|
+
"存在多个失败?" [shape=diamond];
|
|
21
|
+
"是否相互独立?" [shape=diamond];
|
|
22
|
+
"由单个智能体统一排查" [shape=box];
|
|
23
|
+
"每个问题域分配一个智能体" [shape=box];
|
|
24
|
+
"能否并行执行?" [shape=diamond];
|
|
25
|
+
"串行分发智能体" [shape=box];
|
|
26
|
+
"并行分发" [shape=box];
|
|
27
|
+
|
|
28
|
+
"存在多个失败?" -> "是否相互独立?" [label="是"];
|
|
29
|
+
"是否相互独立?" -> "由单个智能体统一排查" [label="否 - 存在关联"];
|
|
30
|
+
"是否相互独立?" -> "能否并行执行?" [label="是"];
|
|
31
|
+
"能否并行执行?" -> "并行分发" [label="是"];
|
|
32
|
+
"能否并行执行?" -> "串行分发智能体" [label="否 - 存在共享状态"];
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
**适用场景:**
|
|
37
|
+
- 3 个以上测试文件失败,且根因各不相同
|
|
38
|
+
- 多个子系统各自独立出现故障
|
|
39
|
+
- 每个问题无需依赖其他问题的上下文即可理解
|
|
40
|
+
- 各排查过程之间不存在共享状态
|
|
41
|
+
|
|
42
|
+
**不适用场景:**
|
|
43
|
+
- 失败之间存在关联(修复一个可能顺带修复其他)
|
|
44
|
+
- 需要理解完整的系统状态
|
|
45
|
+
- 智能体之间会相互干扰
|
|
46
|
+
|
|
47
|
+
## 使用模式
|
|
48
|
+
|
|
49
|
+
### 1. 识别独立的问题域
|
|
50
|
+
|
|
51
|
+
按故障点对失败进行分组:
|
|
52
|
+
- 文件 A 测试:工具审批流程
|
|
53
|
+
- 文件 B 测试:批量完成行为
|
|
54
|
+
- 文件 C 测试:中止功能
|
|
55
|
+
|
|
56
|
+
每个领域都是独立的——修复工具审批不会影响中止相关的测试。
|
|
57
|
+
|
|
58
|
+
### 2. 创建聚焦的智能体任务
|
|
59
|
+
|
|
60
|
+
每个智能体应获得:
|
|
61
|
+
- **明确范围:** 单个测试文件或子系统
|
|
62
|
+
- **清晰目标:** 让这些测试通过
|
|
63
|
+
- **约束条件:** 不得改动其他代码
|
|
64
|
+
- **预期输出:** 发现了什么、修复了什么的总结
|
|
65
|
+
|
|
66
|
+
### 3. 并行分发
|
|
67
|
+
|
|
68
|
+
在同一条回复中一次性发起全部三个子智能体分发——它们将并行运行:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
Subagent (general-purpose): "Fix agent-tool-abort.test.ts failures"
|
|
72
|
+
Subagent (general-purpose): "Fix batch-completion-behavior.test.ts failures"
|
|
73
|
+
Subagent (general-purpose): "Fix tool-approval-race-conditions.test.ts failures"
|
|
74
|
+
# All three run concurrently.
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
在同一条回复中发起多次分发调用 = 并行执行。每条回复只发一次 = 串行执行。
|
|
78
|
+
|
|
79
|
+
### 4. 复核与集成
|
|
80
|
+
|
|
81
|
+
当智能体返回后:
|
|
82
|
+
- 阅读每一份总结
|
|
83
|
+
- 验证各修复之间是否存在冲突
|
|
84
|
+
- 运行完整测试套件
|
|
85
|
+
- 整合所有变更
|
|
86
|
+
|
|
87
|
+
## 智能体提示词结构
|
|
88
|
+
|
|
89
|
+
优秀的智能体提示词应具备:
|
|
90
|
+
1. **聚焦** - 一个清晰的问题域
|
|
91
|
+
2. **自包含** - 包含理解问题所需的全部上下文
|
|
92
|
+
3. **输出明确** - 智能体应该返回什么?
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
Fix the 3 failing tests in src/agents/agent-tool-abort.test.ts:
|
|
96
|
+
|
|
97
|
+
1. "should abort tool with partial output capture" - expects 'interrupted at' in message
|
|
98
|
+
2. "should handle mixed completed and aborted tools" - fast tool aborted instead of completed
|
|
99
|
+
3. "should properly track pendingToolCount" - expects 3 results but gets 0
|
|
100
|
+
|
|
101
|
+
These are timing/race condition issues. Your task:
|
|
102
|
+
|
|
103
|
+
1. Read the test file and understand what each test verifies
|
|
104
|
+
2. Identify root cause - timing issues or actual bugs?
|
|
105
|
+
3. Fix by:
|
|
106
|
+
- Replacing arbitrary timeouts with event-based waiting
|
|
107
|
+
- Fixing bugs in abort implementation if found
|
|
108
|
+
- Adjusting test expectations if testing changed behavior
|
|
109
|
+
|
|
110
|
+
Do NOT just increase timeouts - find the real issue.
|
|
111
|
+
|
|
112
|
+
Return: Summary of what you found and what you fixed.
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
## 常见错误
|
|
116
|
+
|
|
117
|
+
**❌ 范围过大:** "修复所有测试" - 智能体容易迷失方向
|
|
118
|
+
**✅ 具体明确:** "修复 agent-tool-abort.test.ts" - 范围聚焦
|
|
119
|
+
|
|
120
|
+
**❌ 缺乏上下文:** "修复竞态条件" - 智能体不知道位置
|
|
121
|
+
**✅ 提供上下文:** 粘贴错误信息和测试名称
|
|
122
|
+
|
|
123
|
+
**❌ 缺少约束:** 智能体可能会重构所有内容
|
|
124
|
+
**✅ 明确约束:** "不要改动生产代码" 或 "仅修复测试"
|
|
125
|
+
|
|
126
|
+
**❌ 输出模糊:** "修好它" - 你无法知道改了什么
|
|
127
|
+
**✅ 输出具体:** "返回根因与变更总结"
|
|
128
|
+
|
|
129
|
+
## 何时不应使用
|
|
130
|
+
|
|
131
|
+
**存在关联的失败:** 修复一个可能顺带修复其他——应先一起排查
|
|
132
|
+
**需要完整上下文:** 理解问题需要看到整个系统
|
|
133
|
+
**探索式调试:** 尚不清楚哪里出了问题
|
|
134
|
+
**存在共享状态:** 智能体会相互干扰(编辑同一文件、占用同一资源)
|
|
135
|
+
|
|
136
|
+
## 来自真实会话的示例
|
|
137
|
+
|
|
138
|
+
**场景:** 大规模重构后,3 个文件共出现 6 个测试失败
|
|
139
|
+
|
|
140
|
+
**失败情况:**
|
|
141
|
+
- agent-tool-abort.test.ts:3 个失败(时序问题)
|
|
142
|
+
- batch-completion-behavior.test.ts:2 个失败(工具未执行)
|
|
143
|
+
- tool-approval-race-conditions.test.ts:1 个失败(执行次数为 0)
|
|
144
|
+
|
|
145
|
+
**决策:** 属于独立领域——中止逻辑、批量完成、竞态条件三者相互分离
|
|
146
|
+
|
|
147
|
+
**分发:**
|
|
148
|
+
```
|
|
149
|
+
Agent 1 → Fix agent-tool-abort.test.ts
|
|
150
|
+
Agent 2 → Fix batch-completion-behavior.test.ts
|
|
151
|
+
Agent 3 → Fix tool-approval-race-conditions.test.ts
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**结果:**
|
|
155
|
+
- Agent 1:用基于事件的等待替代了固定超时
|
|
156
|
+
- Agent 2:修复了事件结构缺陷(threadId 位置错误)
|
|
157
|
+
- Agent 3:增加了对异步工具执行完成的等待
|
|
158
|
+
|
|
159
|
+
**集成:** 所有修复相互独立,无冲突,全量测试通过
|
|
160
|
+
|
|
161
|
+
## 验证
|
|
162
|
+
|
|
163
|
+
智能体返回后:
|
|
164
|
+
1. **复核每份总结** - 理解变更内容
|
|
165
|
+
2. **检查是否存在冲突** - 智能体是否编辑了同一段代码?
|
|
166
|
+
3. **运行全量测试** - 验证所有修复协同工作正常
|
|
167
|
+
4. **抽样检查** - 智能体可能存在系统性错误
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: executing-plans
|
|
3
|
+
description: "适用于已有详细实现计划的场景,在隔离会话中逐项执行、严格校验并在关键节点复核的执行流程"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 执行计划
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
加载计划、批判性复审、执行全部任务、完成后汇报。
|
|
11
|
+
|
|
12
|
+
**开始时声明:** "I'm using the executing-plans skill to implement this plan."
|
|
13
|
+
|
|
14
|
+
**提示:** 告知你的协作伙伴,Superpowers 在可使用 subagent 时效果更好(Claude Code、Codex CLI、Codex App、Copilot CLI 和 Gemini CLI 均符合条件;各平台工具说明见 `../using-superpowers/references/`)。如可使用 subagent,请使用 superpowers:subagent-driven-development 替代本 skill。
|
|
15
|
+
|
|
16
|
+
## 执行流程
|
|
17
|
+
|
|
18
|
+
### 步骤 1:加载并复审计划
|
|
19
|
+
1. 确保工作区已隔离:使用 superpowers:using-git-worktrees 创建新工作区或校验现有工作区
|
|
20
|
+
2. 读取计划文件
|
|
21
|
+
3. 批判性复审——识别计划中的疑问或风险点
|
|
22
|
+
4. 如有疑问:开始前向协作伙伴提出
|
|
23
|
+
5. 如无疑问:为计划条目创建 todos 并继续执行
|
|
24
|
+
|
|
25
|
+
### 步骤 2:执行任务
|
|
26
|
+
|
|
27
|
+
针对每项任务:
|
|
28
|
+
1. 标记为 in_progress
|
|
29
|
+
2. 严格按步骤执行(计划已拆分为小粒度步骤)
|
|
30
|
+
3. 按要求执行校验
|
|
31
|
+
4. 标记为 completed
|
|
32
|
+
|
|
33
|
+
### 步骤 3:完成开发
|
|
34
|
+
|
|
35
|
+
所有任务完成并校验通过后:
|
|
36
|
+
- 声明:"I'm using the finishing-a-development-branch skill to complete this work."
|
|
37
|
+
- **必选子 skill:** 使用 superpowers:finishing-a-development-branch
|
|
38
|
+
- 按该 skill 流程校验测试、提供选项并执行所选方案
|
|
39
|
+
|
|
40
|
+
## 何时停止并寻求帮助
|
|
41
|
+
|
|
42
|
+
**出现以下情况时立即停止执行:**
|
|
43
|
+
- 遇到阻碍(缺失依赖、测试失败、指令不清晰)
|
|
44
|
+
- 计划存在关键缺口导致无法启动
|
|
45
|
+
- 无法理解某条指令
|
|
46
|
+
- 校验反复失败
|
|
47
|
+
|
|
48
|
+
**不要猜测,主动澄清。**
|
|
49
|
+
|
|
50
|
+
## 何时回溯到 earlier 步骤
|
|
51
|
+
|
|
52
|
+
**回到复审(步骤 1),当:**
|
|
53
|
+
- 协作伙伴根据你的反馈更新了计划
|
|
54
|
+
- 基础方案需要重新思考
|
|
55
|
+
|
|
56
|
+
**不要强行突破阻碍**——停下来并提问。
|
|
57
|
+
|
|
58
|
+
## 牢记
|
|
59
|
+
- 首先对计划进行批判性复审
|
|
60
|
+
- 严格按计划步骤执行
|
|
61
|
+
- 不要跳过校验
|
|
62
|
+
- 计划要求引用 skill 时按要求引用
|
|
63
|
+
- 受阻时停止,不要猜测
|
|
64
|
+
- 未经用户明确同意,绝不在 main/master 分支上开始实现
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finishing-a-development-branch
|
|
3
|
+
description: "实现完成且全部测试通过后,用于决定分支集成方式,支持本地合并、创建 PR 或保留分支等完整收尾流程。"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 完成开发分支
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
**核心原则:** 验证测试 → 检测环境 → 提供选项 → 执行选择 → 清理收尾。
|
|
11
|
+
|
|
12
|
+
**开始时声明:** “我将使用 finishing-a-development-branch 技能来完成收尾工作。”
|
|
13
|
+
|
|
14
|
+
## 步骤 1:验证测试
|
|
15
|
+
|
|
16
|
+
运行项目的完整测试套件(`npm test` / `cargo test` / `pytest` / `go test ./...`)。
|
|
17
|
+
|
|
18
|
+
**若测试失败**,报告失败信息并停止——只有测试全通过后才展示选项菜单:
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
测试未通过(<N> 项失败),需修复后才能完成:
|
|
22
|
+
|
|
23
|
+
[展示失败详情]
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**若测试通过:** 继续进入步骤 2。
|
|
27
|
+
|
|
28
|
+
## 步骤 2:检测环境
|
|
29
|
+
|
|
30
|
+
```bash
|
|
31
|
+
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
|
|
32
|
+
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
|
|
33
|
+
# Capture now, while still inside the workspace — Step 5 changes directory
|
|
34
|
+
# before cleanup (Step 6) needs this value
|
|
35
|
+
WORKTREE_PATH=$(git rev-parse --show-toplevel)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
下表决定展示哪种菜单以及如何执行清理:
|
|
39
|
+
|
|
40
|
+
| 状态 | 菜单 | 清理方式 |
|
|
41
|
+
|-------|------|---------|
|
|
42
|
+
| `GIT_DIR == GIT_COMMON`(普通仓库) | 标准 3 项选项 | 无需清理 worktree |
|
|
43
|
+
| `GIT_DIR != GIT_COMMON`,具名分支 | 标准 3 项选项 | 按来源判定(见步骤 6) |
|
|
44
|
+
| `GIT_DIR != GIT_COMMON`,游离 HEAD | 精简 2 项选项(无合并) | 由外部托管——保持原样 |
|
|
45
|
+
|
|
46
|
+
## 步骤 3:确定基线分支
|
|
47
|
+
|
|
48
|
+
基线分支即本次工作分叉时的来源分支——通常在计划、对话记录或分支的上游中已注明。若尚未明确,请询问:“该分支是从 <你的最佳推测> 分叉出来的,这样对吗?” 合并前务必确认:合错基线分支的回滚成本很高。
|
|
49
|
+
|
|
50
|
+
## 步骤 4:提供选项
|
|
51
|
+
|
|
52
|
+
**普通仓库与具名分支 worktree——请严格按以下 3 项呈现:**
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
实现已完成。接下来怎么处理?
|
|
56
|
+
|
|
57
|
+
1. 本地合并回 <base-branch>
|
|
58
|
+
2. 推送并创建 Pull Request
|
|
59
|
+
3. 保持分支现状(稍后自行处理)
|
|
60
|
+
|
|
61
|
+
请选择:
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**游离 HEAD——请严格按以下 2 项呈现:**
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
实现已完成。当前处于游离 HEAD(外部托管的工作区)。
|
|
68
|
+
|
|
69
|
+
1. 以新分支推送并创建 Pull Request
|
|
70
|
+
2. 保持现状(稍后自行处理)
|
|
71
|
+
|
|
72
|
+
请选择:
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
请严格按原文呈现菜单——保持简洁,所有选项均来自上表。仅当人类协作者明确要求丢弃工作时才处理丢弃流程(见下文“若协作者要求丢弃工作”)。等待对方答复;集成决策权归协作者所有。
|
|
76
|
+
|
|
77
|
+
## 步骤 5:执行选择
|
|
78
|
+
|
|
79
|
+
### 选项 1:本地合并
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
# Get main repo root for CWD safety
|
|
83
|
+
MAIN_ROOT=$(git -C "$(git rev-parse --git-common-dir)/.." rev-parse --show-toplevel)
|
|
84
|
+
cd "$MAIN_ROOT"
|
|
85
|
+
|
|
86
|
+
# Merge first — verify success before removing anything
|
|
87
|
+
git checkout <base-branch>
|
|
88
|
+
git pull
|
|
89
|
+
git merge <feature-branch>
|
|
90
|
+
|
|
91
|
+
# Verify tests on merged result
|
|
92
|
+
<test command>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
若合并后的测试失败:立即停止,保留 worktree 与分支并展开排查——此时尚未推送,合并仅在本地,可恢复。
|
|
96
|
+
|
|
97
|
+
合并结果测试通过后:清理 worktree(步骤 6),然后删除分支:
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
git branch -d <feature-branch>
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
### 选项 2:推送并创建 PR
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
git push -u origin <feature-branch>
|
|
107
|
+
# From a detached HEAD, name the new branch on the remote:
|
|
108
|
+
# git push origin HEAD:refs/heads/<new-branch>
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
然后针对 <base-branch> 创建 pull/merge request——优先使用代码托管平台的命令行工具,若无则使用推送后打印的创建链接——遵循仓库现有的 PR 模板与规范,并将 URL 汇报给协作者。
|
|
112
|
+
|
|
113
|
+
保留 worktree——协作者将在此处理 PR 反馈并继续迭代。
|
|
114
|
+
|
|
115
|
+
### 选项 3:保持现状
|
|
116
|
+
|
|
117
|
+
汇报:“已保留分支 <name>,worktree 保留于 <path>。”
|
|
118
|
+
|
|
119
|
+
### 若协作者要求丢弃工作
|
|
120
|
+
|
|
121
|
+
此路径仅在明确要求丢弃工作时触发,需先进行确认:
|
|
122
|
+
|
|
123
|
+
```
|
|
124
|
+
此操作将永久删除:
|
|
125
|
+
- 分支 <name>
|
|
126
|
+
- 全部提交:<commit-list>
|
|
127
|
+
- 位于 <path> 的 worktree
|
|
128
|
+
|
|
129
|
+
请输入 'discard' 以确认。
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
等待该确切确认。确认后:
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
MAIN_ROOT=$(git -C "$(git rev-parse --git-common-dir)/.." rev-parse --show-toplevel)
|
|
136
|
+
cd "$MAIN_ROOT"
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
然后清理 worktree(步骤 6)并强制删除分支:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
git branch -D <feature-branch>
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## 步骤 6:清理工作区
|
|
146
|
+
|
|
147
|
+
**仅在选项 1 与已确认的丢弃操作中执行。** 选项 2 与选项 3 始终保留 worktree。两种调用方已切换至主仓库根目录——worktree 移除必须在 worktree 外部执行——并使用步骤 2 捕获的 `GIT_DIR`/`GIT_COMMON`/`WORKTREE_PATH` 值(目录切换前已保存)。
|
|
148
|
+
|
|
149
|
+
**若 `GIT_DIR == GIT_COMMON`:** 普通仓库,无需清理 worktree,流程结束。
|
|
150
|
+
|
|
151
|
+
**若 `WORKTREE_PATH` 位于 `.worktrees/` 或 `worktrees/` 之下:** 该 worktree 由 Superpowers 创建——由我们负责清理:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
git worktree remove "$WORKTREE_PATH"
|
|
155
|
+
git worktree prune # Self-healing: clean up any stale registrations
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
**若移除被拒绝**(提示 `contains modified or untracked files`):说明 worktree 中存在仅存于此的未提交文件——可能是计划、笔记或临时文件。切勿自行使用 `--force`。向协作者展示涉及的文件并征询意见:
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
git -C "$WORKTREE_PATH" status --porcelain -uall
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```
|
|
165
|
+
worktree 移除被拒绝——以下文件尚未提交:
|
|
166
|
+
|
|
167
|
+
<file list>
|
|
168
|
+
|
|
169
|
+
1. 清理前提交至 <branch>
|
|
170
|
+
2. 移动至 <主仓库根目录>
|
|
171
|
+
3. 删除(不可恢复)
|
|
172
|
+
|
|
173
|
+
请选择:
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
按选择执行,随后移除 worktree。
|
|
177
|
+
|
|
178
|
+
**其他情况:** 该工作区由宿主环境托管——保持原样。若平台提供了工作区退出工具,请使用它。
|
|
179
|
+
|
|
180
|
+
## 快速参考
|
|
181
|
+
|
|
182
|
+
| 选项 | 合并 | 推送 | 保留 Worktree | 清理分支 |
|
|
183
|
+
|--------|-------|------|---------------|----------------|
|
|
184
|
+
| 1. 本地合并 | 是 | - | - | 是 |
|
|
185
|
+
| 2. 创建 PR | - | 是 | 是 | - |
|
|
186
|
+
| 3. 保持现状 | - | - | 是 | - |
|
|
187
|
+
| 丢弃(仅在明确要求时) | - | - | - | 是(强制) |
|
|
188
|
+
|
|
189
|
+
## 常见借口与实际情况
|
|
190
|
+
|
|
191
|
+
| 借口 | 实际情况 |
|
|
192
|
+
|--------|---------|
|
|
193
|
+
| “本会话早些时候测试已通过” | 请在即将集成的代码树上重新运行完整测试套件,一次通过仅能证明当时的代码树。 |
|
|
194
|
+
| “他们显然想直接合并” | 集成方式由协作者决定,请呈现菜单并等待选择。 |
|
|
195
|
+
| “他们似乎已完成该功能——我来提议丢弃吧” | 菜单已完整,无需额外提议,仅当协作者明确要求丢弃时才处理。 |
|
|
196
|
+
| “‘好,删掉吧’也算确认” | 只有输入 `discard` 才视为有效确认并授权删除。 |
|
|
197
|
+
| “PR 已提交,worktree 就是冗余了” | PR 反馈需在该 worktree 中修复,工作落盘前应予以保留。 |
|
|
198
|
+
| “这个 worktree 看起来废弃了——顺手一起清理” | 仅清理位于 `.worktrees/` 或 `worktrees/` 下的 worktree,其余均归宿主环境所有。 |
|
|
199
|
+
| “移除被拒——用 `--force` 收个尾就行” | 拒绝意味着文件仅存在于该 worktree,`--force` 会永久销毁它们,请向协作者展示并征询意见。 |
|
|
200
|
+
| “合并后失败大概是偶发问题” | 合并结果失败则立即中止,保留分支与 worktree 以便排查。 |
|
|
201
|
+
| “基线分支显然是 main” | 请确认分叉点或主动询问,合错基线的回滚成本很高。 |
|
|
202
|
+
| “推送被拒——强制推送就能解决” | 推送被拒说明远端已有更新,请先排查;仅在协作者明确要求时才执行强制推送。 |
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: receiving-code-review
|
|
3
|
+
description: "收到代码评审意见时使用,实施建议前需技术验证与澄清,适用于反馈模糊或存疑场景,强调严谨核实而非盲从"
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 接收代码评审
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
代码评审需要的是技术研判,而非情绪化表演。
|
|
11
|
+
|
|
12
|
+
**核心原则:** 先验证,再实施;先提问,再假设。技术正确性优先于社交舒适度。
|
|
13
|
+
|
|
14
|
+
## 响应模式
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
WHEN 收到代码评审反馈时:
|
|
18
|
+
|
|
19
|
+
1. 阅读:完整阅读全部反馈,不急于回应
|
|
20
|
+
2. 理解:用自己的话复述需求(或提问澄清)
|
|
21
|
+
3. 核实:对照代码库实际情况进行校验
|
|
22
|
+
4. 评估:对当前代码库而言是否技术上合理?
|
|
23
|
+
5. 回应:技术性确认或有理有据的异议
|
|
24
|
+
6. 实施:一次处理一项,逐项验证
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## 禁止的回应方式
|
|
28
|
+
|
|
29
|
+
**严禁:**
|
|
30
|
+
- "你完全正确!"(明确违反指令文件)
|
|
31
|
+
- "好建议!" / "非常棒的反馈!"(表演式认同)
|
|
32
|
+
- "我马上来实现"(未经核实就承诺)
|
|
33
|
+
|
|
34
|
+
**应改为:**
|
|
35
|
+
- 复述技术需求
|
|
36
|
+
- 提出澄清问题
|
|
37
|
+
- 若判断有误,用技术理由提出异议
|
|
38
|
+
- 直接开始动手(行动胜于空话)
|
|
39
|
+
|
|
40
|
+
## 处理模糊的反馈
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
IF 存在表述不清的条目:
|
|
44
|
+
停止 - 在澄清前不要实施任何内容
|
|
45
|
+
针对不清晰的条目请求澄清
|
|
46
|
+
|
|
47
|
+
原因:各条目之间可能存在关联。理解不完整会导致实现错误。
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**示例:**
|
|
51
|
+
```
|
|
52
|
+
你的协作人:"修复 1-6 项"
|
|
53
|
+
你已理解 1,2,3,6,对 4,5 不清楚。
|
|
54
|
+
|
|
55
|
+
❌ 错误做法:先实现 1,2,3,6,之后再问 4,5
|
|
56
|
+
✅ 正确做法:"我已理解 1,2,3,6 项。在继续之前,需要澄清 4 和 5。"
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## 按来源区分处理
|
|
60
|
+
|
|
61
|
+
### 来自你的协作人
|
|
62
|
+
- **可信** - 理解后即可实施
|
|
63
|
+
- **仍需提问** - 若范围不清晰
|
|
64
|
+
- **不做表演式认同**
|
|
65
|
+
- **直接进入行动**或做技术性确认
|
|
66
|
+
|
|
67
|
+
### 来自外部评审者
|
|
68
|
+
```
|
|
69
|
+
实施前:
|
|
70
|
+
1. 检查:对当前代码库而言技术上是否正确?
|
|
71
|
+
2. 检查:是否会破坏现有功能?
|
|
72
|
+
3. 检查:当前实现是否有特定原因?
|
|
73
|
+
4. 检查:是否在所有平台/版本上均可用?
|
|
74
|
+
5. 检查:评审者是否了解完整上下文?
|
|
75
|
+
|
|
76
|
+
IF 建议看似有误:
|
|
77
|
+
用技术理由提出异议
|
|
78
|
+
|
|
79
|
+
IF 无法轻易核实:
|
|
80
|
+
直接说明:"没有 [X] 我无法核实这一点。是否需要我[去调研/去询问/继续推进]?"
|
|
81
|
+
|
|
82
|
+
IF 与协作人之前的决策冲突:
|
|
83
|
+
先与协作人讨论,再做决定
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
**你的协作人的原则:** "对待外部反馈——保持怀疑,但要认真核查"
|
|
87
|
+
|
|
88
|
+
## 对“专业化”功能的 YAGNI 检查
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
IF 评审者建议"按规范完整实现":
|
|
92
|
+
grep 代码库,检查实际调用情况
|
|
93
|
+
|
|
94
|
+
IF 未被调用:"该接口未被调用。是否直接移除(YAGNI)?"
|
|
95
|
+
IF 已被调用:再按规范完整实现
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**你的协作人的原则:** "你和评审者都向我汇报。如果我们不需要这个功能,就不要添加。"
|
|
99
|
+
|
|
100
|
+
## 实施顺序
|
|
101
|
+
|
|
102
|
+
```
|
|
103
|
+
FOR 多条反馈:
|
|
104
|
+
1. 先澄清所有不清晰的项
|
|
105
|
+
2. 然后按以下顺序实施:
|
|
106
|
+
- 阻塞性问题(崩溃、安全)
|
|
107
|
+
- 简单修复(拼写、导入)
|
|
108
|
+
- 复杂修复(重构、逻辑)
|
|
109
|
+
3. 逐项单独测试
|
|
110
|
+
4. 验证无回归
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## 何时提出异议
|
|
114
|
+
|
|
115
|
+
出现以下情况时应提出异议:
|
|
116
|
+
- 建议会破坏现有功能
|
|
117
|
+
- 评审者缺乏完整上下文
|
|
118
|
+
- 违反 YAGNI(功能未被使用)
|
|
119
|
+
- 在当前技术栈下技术上不正确
|
|
120
|
+
- 存在历史/兼容性原因需要保留现状
|
|
121
|
+
- 与协作人的架构决策冲突
|
|
122
|
+
|
|
123
|
+
**如何提出异议:**
|
|
124
|
+
- 使用技术理由,而非防御性措辞
|
|
125
|
+
- 提出具体问题
|
|
126
|
+
- 引用可运行的测试/代码
|
|
127
|
+
- 若涉及架构问题,请协作人介入
|
|
128
|
+
|
|
129
|
+
**如果你不便当面提出异议:** 先点明这种顾虑,然后私下告知协作人你发现的问题。他们会欣赏你的坦诚。
|
|
130
|
+
|
|
131
|
+
## 确认正确的反馈
|
|
132
|
+
|
|
133
|
+
当反馈确实正确时:
|
|
134
|
+
```
|
|
135
|
+
✅ "已修复。[简要说明改了什么]"
|
|
136
|
+
✅ "捉得好——[具体问题]。已在[位置]修复。"
|
|
137
|
+
✅ [直接修复,并在代码中体现]
|
|
138
|
+
|
|
139
|
+
❌ "你完全正确!"
|
|
140
|
+
❌ "好建议!"
|
|
141
|
+
❌ "感谢指出!"
|
|
142
|
+
❌ "谢谢你的[任何内容]"
|
|
143
|
+
❌ 任何形式的感谢措辞
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**为何不说感谢:** 行动即回应。直接修复即可。代码本身就能证明你已听取反馈。
|
|
147
|
+
|
|
148
|
+
**如果你发现自己正要写"感谢":** 删掉它。改为陈述修复内容。
|
|
149
|
+
|
|
150
|
+
## 优雅地纠正你的异议
|
|
151
|
+
|
|
152
|
+
如果你提出异议后发现自己错了:
|
|
153
|
+
```
|
|
154
|
+
✅ "你是对的——我检查了 [X],确实会 [Y]。正在实现。"
|
|
155
|
+
✅ "已核实,你是正确的。我最初理解有误是因为[原因]。正在修复。"
|
|
156
|
+
|
|
157
|
+
❌ 长篇道歉
|
|
158
|
+
❌ 为何当初要提出异议的辩解
|
|
159
|
+
❌ 过度解释
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
客观陈述纠正事实,然后继续推进。
|
|
163
|
+
|
|
164
|
+
## 常见错误
|
|
165
|
+
|
|
166
|
+
| 错误 | 修正方法 |
|
|
167
|
+
|---------|-----|
|
|
168
|
+
| 表演式认同 | 陈述需求或直接行动 |
|
|
169
|
+
| 盲目实施 | 先对照代码库核实 |
|
|
170
|
+
| 批量修改且不测试 | 一次一项,逐项测试 |
|
|
171
|
+
| 默认评审者一定正确 | 检查是否会引发破坏 |
|
|
172
|
+
| 回避异议 | 技术正确性优先于舒适度 |
|
|
173
|
+
| 部分实现 | 先澄清所有条目 |
|
|
174
|
+
| 无法核实仍继续推进 | 说明局限性,请求指示 |
|
|
175
|
+
|
|
176
|
+
## 实际示例
|
|
177
|
+
|
|
178
|
+
**表演式认同(错误):**
|
|
179
|
+
```
|
|
180
|
+
评审者:"移除历史遗留代码"
|
|
181
|
+
❌ "你完全正确!我来移除……"
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**技术核实(正确):**
|
|
185
|
+
```
|
|
186
|
+
评审者:"移除历史遗留代码"
|
|
187
|
+
✅ "核查中……构建目标是 10.15+,该 API 需要 13+。为兼容旧版本仍需保留历史代码。当前实现 bundle ID 有误——是修复它,还是放弃对 13 以下版本的支持?"
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
**YAGNI(正确):**
|
|
191
|
+
```
|
|
192
|
+
评审者:"用数据库、日期筛选、CSV 导出完整实现指标统计"
|
|
193
|
+
✅ "已 grep 代码库——没有地方调用该接口。是否直接移除(YAGNI)?还是有我未发现的调用场景?"
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
**条目不清晰(正确):**
|
|
197
|
+
```
|
|
198
|
+
你的协作人:"修复 1-6 项"
|
|
199
|
+
你已理解 1,2,3,6,对 4,5 不清楚。
|
|
200
|
+
✅ "已理解 1,2,3,6。实现前需要澄清 4 和 5。"
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## GitHub 评论线程回复
|
|
204
|
+
|
|
205
|
+
在 GitHub 上回复行内评审意见时,请在评论线程中回复(`gh api repos/{owner}/{repo}/pulls/{pr}/comments/{id}/replies`),而非作为 PR 的顶层评论。
|