sdd-full 4.0.0 → 4.2.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/package.json +1 -1
- package/skills/brainstorming/SKILL.md +164 -0
- package/skills/brainstorming/scripts/frame-template.html +214 -0
- package/skills/brainstorming/scripts/helper.js +88 -0
- package/skills/brainstorming/scripts/server.cjs +338 -0
- package/skills/brainstorming/scripts/start-server.sh +153 -0
- package/skills/brainstorming/scripts/stop-server.sh +55 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +48 -0
- package/skills/brainstorming/visual-companion.md +286 -0
- package/skills/chinese-code-review/SKILL.md +277 -0
- package/skills/chinese-commit-conventions/SKILL.md +364 -0
- package/skills/chinese-documentation/SKILL.md +448 -0
- package/skills/chinese-git-workflow/SKILL.md +510 -0
- package/skills/design-planning/enterprise-spec/SKILL.md +5 -0
- package/skills/design-planning/flutter-av/SKILL.md +44 -0
- package/skills/design-planning/flutter-map/SKILL.md +44 -0
- package/skills/design-planning/ui-sdd-specialized/SKILL.md +50 -0
- package/skills/development-execution/flutter-errors/SKILL.md +44 -0
- package/skills/dispatching-parallel-agents/SKILL.md +182 -0
- package/skills/executing-plans/SKILL.md +175 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/mcp-builder/SKILL.md +255 -0
- package/skills/quality-assurance/bdd-acceptance/SKILL.md +49 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requesting-code-review/code-reviewer.md +146 -0
- package/skills/requirement-analysis/sdd-full/SKILL.md +54 -0
- package/skills/requirement-analysis/unified-flow/SKILL.md +45 -0
- package/skills/rules/skill-map.md +97 -0
- package/skills/rules/user_rules.md +69 -0
- package/skills/special-tools/env-check/SKILL.md +47 -0
- package/skills/subagent-driven-development/SKILL.md +277 -0
- package/skills/subagent-driven-development/code-quality-reviewer-prompt.md +26 -0
- package/skills/subagent-driven-development/implementer-prompt.md +113 -0
- package/skills/subagent-driven-development/spec-reviewer-prompt.md +61 -0
- package/skills/systematic-debugging/CREATION-LOG.md +119 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/systematic-debugging/condition-based-waiting-example.ts +158 -0
- package/skills/systematic-debugging/condition-based-waiting.md +115 -0
- package/skills/systematic-debugging/defense-in-depth.md +122 -0
- package/skills/systematic-debugging/find-polluter.sh +63 -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 +371 -0
- package/skills/test-driven-development/testing-anti-patterns.md +299 -0
- package/skills/using-git-worktrees/SKILL.md +218 -0
- package/skills/using-superpowers/SKILL.md +134 -0
- package/skills/using-superpowers/references/codex-tools.md +25 -0
- package/skills/using-superpowers/references/gemini-tools.md +33 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/workflow-runner/SKILL.md +172 -0
- package/skills/writing-plans/SKILL.md +152 -0
- package/skills/writing-plans/plan-document-reviewer-prompt.md +49 -0
- package/skills/writing-skills/SKILL.md +654 -0
- package/skills/writing-skills/anthropic-best-practices.md +1149 -0
- package/skills/writing-skills/examples/CLAUDE_MD_TESTING.md +189 -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 +168 -0
- package/skills/writing-skills/testing-skills-with-subagents.md +384 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: dispatching-parallel-agents
|
|
3
|
+
description: 当面对 2 个以上可以独立进行、无共享状态或顺序依赖的任务时使用
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 并行分派智能体
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
你将任务委派给具有隔离上下文的专用智能体。通过精心设计它们的指令和上下文,确保它们专注并成功完成任务。它们不应继承你的会话上下文或历史记录——你要精确构造它们所需的一切。这样也能为你自己保留用于协调工作的上下文。
|
|
11
|
+
|
|
12
|
+
当你遇到多个不相关的失败(不同的测试文件、不同的子系统、不同的 bug),逐一排查会浪费时间。每个排查都是独立的,可以并行进行。
|
|
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
|
+
```typescript
|
|
69
|
+
// 在 Claude Code / AI 环境中
|
|
70
|
+
Task("修复 agent-tool-abort.test.ts 的失败")
|
|
71
|
+
Task("修复 batch-completion-behavior.test.ts 的失败")
|
|
72
|
+
Task("修复 tool-approval-race-conditions.test.ts 的失败")
|
|
73
|
+
// 三个任务并发运行
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### 4. 审查与集成
|
|
77
|
+
|
|
78
|
+
当智能体返回时:
|
|
79
|
+
- 阅读每个总结
|
|
80
|
+
- 验证修复之间没有冲突
|
|
81
|
+
- 运行完整测试套件
|
|
82
|
+
- 集成所有更改
|
|
83
|
+
|
|
84
|
+
## 智能体提示词结构
|
|
85
|
+
|
|
86
|
+
好的智能体提示词应该是:
|
|
87
|
+
1. **聚焦的** - 一个清晰的问题域
|
|
88
|
+
2. **自包含的** - 包含理解问题所需的所有上下文
|
|
89
|
+
3. **明确输出要求** - 智能体应该返回什么?
|
|
90
|
+
|
|
91
|
+
```markdown
|
|
92
|
+
修复 src/agents/agent-tool-abort.test.ts 中 3 个失败的测试:
|
|
93
|
+
|
|
94
|
+
1. "should abort tool with partial output capture" - 期望消息中包含 'interrupted at'
|
|
95
|
+
2. "should handle mixed completed and aborted tools" - 快速工具被中止而非完成
|
|
96
|
+
3. "should properly track pendingToolCount" - 期望 3 个结果但得到 0 个
|
|
97
|
+
|
|
98
|
+
这些是时序/竞态条件问题。你的任务:
|
|
99
|
+
|
|
100
|
+
1. 阅读测试文件,理解每个测试验证的内容
|
|
101
|
+
2. 找到根因——是时序问题还是实际 bug?
|
|
102
|
+
3. 修复方式:
|
|
103
|
+
- 用基于事件的等待替换任意超时
|
|
104
|
+
- 如果发现中止实现中的 bug 则修复
|
|
105
|
+
- 如果测试的是已变更的行为则调整测试期望
|
|
106
|
+
|
|
107
|
+
不要只是增加超时时间——找到真正的问题。
|
|
108
|
+
|
|
109
|
+
返回:你发现了什么以及修复了什么的总结。
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
## 常见错误
|
|
113
|
+
|
|
114
|
+
**错误做法:太宽泛:** "修复所有测试" - 智能体会迷失方向
|
|
115
|
+
**正确做法:具体明确:** "修复 agent-tool-abort.test.ts" - 聚焦的范围
|
|
116
|
+
|
|
117
|
+
**错误做法:无上下文:** "修复竞态条件" - 智能体不知道在哪里
|
|
118
|
+
**正确做法:提供上下文:** 粘贴错误信息和测试名称
|
|
119
|
+
|
|
120
|
+
**错误做法:无约束:** 智能体可能会重构所有代码
|
|
121
|
+
**正确做法:设置约束:** "不要修改生产代码" 或 "只修复测试"
|
|
122
|
+
|
|
123
|
+
**错误做法:模糊的输出要求:** "修好它" - 你不知道改了什么
|
|
124
|
+
**正确做法:明确要求:** "返回根因和修改内容的总结"
|
|
125
|
+
|
|
126
|
+
## 不适用的场景
|
|
127
|
+
|
|
128
|
+
**关联性失败:** 修复一个可能修复其他的——先一起排查
|
|
129
|
+
**需要完整上下文:** 理解问题需要看到整个系统
|
|
130
|
+
**探索性调试:** 你还不知道什么坏了
|
|
131
|
+
**共享状态:** 智能体会互相干扰(编辑同一文件、使用同一资源)
|
|
132
|
+
|
|
133
|
+
## 实际案例
|
|
134
|
+
|
|
135
|
+
**场景:** 大规模重构后,3 个文件中出现 6 个测试失败
|
|
136
|
+
|
|
137
|
+
**失败情况:**
|
|
138
|
+
- agent-tool-abort.test.ts:3 个失败(时序问题)
|
|
139
|
+
- batch-completion-behavior.test.ts:2 个失败(工具未执行)
|
|
140
|
+
- tool-approval-race-conditions.test.ts:1 个失败(执行计数 = 0)
|
|
141
|
+
|
|
142
|
+
**决策:** 独立的问题域——中止逻辑、批量完成、竞态条件各自独立
|
|
143
|
+
|
|
144
|
+
**分派:**
|
|
145
|
+
```
|
|
146
|
+
智能体 1 → 修复 agent-tool-abort.test.ts
|
|
147
|
+
智能体 2 → 修复 batch-completion-behavior.test.ts
|
|
148
|
+
智能体 3 → 修复 tool-approval-race-conditions.test.ts
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
**结果:**
|
|
152
|
+
- 智能体 1:用基于事件的等待替换了超时
|
|
153
|
+
- 智能体 2:修复了事件结构 bug(threadId 位置不对)
|
|
154
|
+
- 智能体 3:添加了等待异步工具执行完成的逻辑
|
|
155
|
+
|
|
156
|
+
**集成:** 所有修复互相独立,无冲突,完整测试套件全部通过
|
|
157
|
+
|
|
158
|
+
**节省的时间:** 3 个问题并行解决 vs 顺序解决
|
|
159
|
+
|
|
160
|
+
## 核心优势
|
|
161
|
+
|
|
162
|
+
1. **并行化** - 多个排查同时进行
|
|
163
|
+
2. **聚焦** - 每个智能体范围窄,需要跟踪的上下文少
|
|
164
|
+
3. **独立性** - 智能体之间互不干扰
|
|
165
|
+
4. **速度** - 3 个问题在 1 个问题的时间内解决
|
|
166
|
+
|
|
167
|
+
## 验证
|
|
168
|
+
|
|
169
|
+
智能体返回后:
|
|
170
|
+
1. **审查每个总结** - 理解改了什么
|
|
171
|
+
2. **检查冲突** - 智能体是否编辑了同一段代码?
|
|
172
|
+
3. **运行完整套件** - 验证所有修复协同工作
|
|
173
|
+
4. **抽查** - 智能体可能犯系统性错误
|
|
174
|
+
|
|
175
|
+
## 实际效果
|
|
176
|
+
|
|
177
|
+
来自调试会话(2025-10-03):
|
|
178
|
+
- 3 个文件中 6 个失败
|
|
179
|
+
- 并行分派 3 个智能体
|
|
180
|
+
- 所有排查并发完成
|
|
181
|
+
- 所有修复成功集成
|
|
182
|
+
- 智能体之间的更改零冲突
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: executing-plans
|
|
3
|
+
description: 当你有一份书面实现计划需要在单独的会话中执行,并设有审查检查点时使用
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 执行计划
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
加载计划,批判性审查,执行所有任务,完成后报告。
|
|
11
|
+
|
|
12
|
+
**开始时宣布:** "我正在使用 executing-plans 技能来实现此计划。"
|
|
13
|
+
|
|
14
|
+
**注意:** 告诉你的人类伙伴,Superpowers 在有子代理支持时效果好得多。如果在支持子代理的平台上运行(如 Claude Code 或 Codex),其工作质量会显著提高。如果子代理可用,请使用 superpowers:subagent-driven-development 而非此技能。
|
|
15
|
+
|
|
16
|
+
## 流程
|
|
17
|
+
|
|
18
|
+
### 步骤 1:加载并审查计划
|
|
19
|
+
|
|
20
|
+
1. 读取计划文件
|
|
21
|
+
2. 批判性审查——识别计划中的任何问题或疑虑
|
|
22
|
+
3. 如果有疑虑:在开始之前向你的人类伙伴提出
|
|
23
|
+
4. 如果没有疑虑:创建 TodoWrite 并继续
|
|
24
|
+
|
|
25
|
+
**审查时重点检查:**
|
|
26
|
+
- 步骤之间是否有依赖遗漏?(A 依赖 B,但 B 排在 A 之后)
|
|
27
|
+
- 验证条件是否明确?("确认可用"不算,"运行 `npm test` 全部通过"才算)
|
|
28
|
+
- 是否有隐含的环境假设?(Node 版本、数据库连接、API Key)
|
|
29
|
+
|
|
30
|
+
**审查示例:**
|
|
31
|
+
```
|
|
32
|
+
计划文件:docs/plan.md
|
|
33
|
+
任务清单:5 个任务
|
|
34
|
+
|
|
35
|
+
审查发现:
|
|
36
|
+
- 任务 3(添加数据库迁移)应在任务 2(编写数据模型)之后,顺序正确 ✓
|
|
37
|
+
- 任务 4 的验证条件写的是"确认功能正常"→ 需澄清:具体跑什么测试?
|
|
38
|
+
- 计划未提及 Python 版本要求 → 需确认
|
|
39
|
+
|
|
40
|
+
向伙伴提出:
|
|
41
|
+
"计划整体可执行。有两个问题:(1) 任务 4 的验证条件不够具体,建议改为
|
|
42
|
+
'运行 pytest tests/test_api.py 全部通过';(2) 需要确认 Python 版本要求。"
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### 步骤 2:执行任务
|
|
46
|
+
|
|
47
|
+
对于每个任务:
|
|
48
|
+
|
|
49
|
+
1. **标记为进行中** — 更新 TodoWrite
|
|
50
|
+
2. **理解目标** — 重读任务描述,明确完成标准
|
|
51
|
+
3. **执行实现** — 严格按照计划步骤执行(计划已有小步骤)
|
|
52
|
+
4. **运行验证** — 按要求运行测试或检查
|
|
53
|
+
5. **提交变更** — 每完成一个任务提交一次,commit message 引用任务编号
|
|
54
|
+
6. **标记为已完成** — 更新 TodoWrite
|
|
55
|
+
|
|
56
|
+
**每个任务的节奏:**
|
|
57
|
+
```
|
|
58
|
+
--- 任务 2/5:添加用户验证 ---
|
|
59
|
+
[标记进行中]
|
|
60
|
+
|
|
61
|
+
目标:为 /api/users 添加输入验证
|
|
62
|
+
完成标准:所有验证测试通过,无效输入返回 400
|
|
63
|
+
|
|
64
|
+
[实现]
|
|
65
|
+
- 添加 validateUser() 中间件
|
|
66
|
+
- 编写 3 个验证规则(email 格式、密码强度、用户名长度)
|
|
67
|
+
|
|
68
|
+
[验证]
|
|
69
|
+
$ npm test -- --grep "validation"
|
|
70
|
+
✓ 拒绝无效 email (12ms)
|
|
71
|
+
✓ 拒绝弱密码 (8ms)
|
|
72
|
+
✓ 拒绝过长用户名 (5ms)
|
|
73
|
+
3 passing
|
|
74
|
+
|
|
75
|
+
[提交]
|
|
76
|
+
$ git add src/middleware/validate.js tests/validation.test.js
|
|
77
|
+
$ git commit -m "feat: 添加用户输入验证(任务 2/5)"
|
|
78
|
+
|
|
79
|
+
[标记完成]
|
|
80
|
+
--- 任务 2/5 完成 ---
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
**批量审查检查点:**
|
|
84
|
+
- 每完成 3 个任务后,暂停回顾:整体方向还对吗?有没有偏离计划?
|
|
85
|
+
- 如果发现前面的实现有问题,先修复再继续,不要带着问题往下走
|
|
86
|
+
|
|
87
|
+
### 步骤 3:处理常见异常
|
|
88
|
+
|
|
89
|
+
**测试失败:**
|
|
90
|
+
1. 读错误信息,定位失败原因
|
|
91
|
+
2. 区分:是实现 bug?还是测试本身有问题?还是计划描述有误?
|
|
92
|
+
3. 实现 bug → 修复并重跑
|
|
93
|
+
4. 测试有问题 → 修复测试,向伙伴说明
|
|
94
|
+
5. 计划有误 → 停下来,向伙伴报告并建议修正
|
|
95
|
+
|
|
96
|
+
**依赖缺失:**
|
|
97
|
+
```
|
|
98
|
+
任务 3 需要 Redis 连接,但计划中没有提及 Redis 配置。
|
|
99
|
+
→ 停止执行
|
|
100
|
+
→ 向伙伴报告:"任务 3 需要 Redis,计划中未包含配置步骤。
|
|
101
|
+
建议:在任务 3 前插入 '配置 Redis 连接' 步骤。"
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**指令不清:**
|
|
105
|
+
- 不要猜测意图,不要"合理推断"
|
|
106
|
+
- 列出你的理解和困惑,让伙伴澄清
|
|
107
|
+
- 等待回复后再继续
|
|
108
|
+
|
|
109
|
+
### 步骤 4:完成开发
|
|
110
|
+
|
|
111
|
+
所有任务完成并验证后:
|
|
112
|
+
- 宣布:"我正在使用 finishing-a-development-branch 技能来完成此工作。"
|
|
113
|
+
- **必需子技能:** 使用 superpowers:finishing-a-development-branch
|
|
114
|
+
- 按照该技能的指引验证测试、展示选项、执行选择
|
|
115
|
+
|
|
116
|
+
**完成报告模板:**
|
|
117
|
+
```
|
|
118
|
+
## 执行报告
|
|
119
|
+
|
|
120
|
+
**计划:** docs/plan.md
|
|
121
|
+
**分支:** feature/user-validation
|
|
122
|
+
**任务:** 5/5 已完成
|
|
123
|
+
|
|
124
|
+
### 完成的任务
|
|
125
|
+
1. ✅ 初始化项目结构
|
|
126
|
+
2. ✅ 添加用户验证
|
|
127
|
+
3. ✅ 添加数据库迁移
|
|
128
|
+
4. ✅ 实现 API 端点
|
|
129
|
+
5. ✅ 添加集成测试
|
|
130
|
+
|
|
131
|
+
### 验证结果
|
|
132
|
+
- 单元测试:23/23 通过
|
|
133
|
+
- 集成测试:8/8 通过
|
|
134
|
+
- lint 检查:0 个警告
|
|
135
|
+
|
|
136
|
+
### 偏离计划的地方
|
|
137
|
+
- 任务 3:Redis 配置从 env 改为 config.yaml(经伙伴同意)
|
|
138
|
+
|
|
139
|
+
### 下一步
|
|
140
|
+
按 finishing-a-development-branch 技能处理合并/PR
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## 何时停下来求助
|
|
144
|
+
|
|
145
|
+
**在以下情况立即停止执行:**
|
|
146
|
+
- 遇到阻塞(缺少依赖、测试失败、指令不清)
|
|
147
|
+
- 计划有严重缺陷导致无法开始
|
|
148
|
+
- 你不理解某条指令
|
|
149
|
+
- 验证反复失败(同一测试失败 2 次以上)
|
|
150
|
+
|
|
151
|
+
**不确定时就问,不要猜测。**
|
|
152
|
+
|
|
153
|
+
## 何时回到之前的步骤
|
|
154
|
+
|
|
155
|
+
**回到审查(步骤 1)当:**
|
|
156
|
+
- 伙伴根据你的反馈更新了计划
|
|
157
|
+
- 根本性的方案需要重新考虑
|
|
158
|
+
|
|
159
|
+
**不要硬闯阻塞** — 停下来问。
|
|
160
|
+
|
|
161
|
+
## 注意事项
|
|
162
|
+
- 先批判性审查计划
|
|
163
|
+
- 严格按照计划步骤执行
|
|
164
|
+
- 不要跳过验证
|
|
165
|
+
- 每个任务单独提交,commit message 引用任务编号
|
|
166
|
+
- 计划要求时引用相应技能
|
|
167
|
+
- 遇到阻塞时停下来,不要猜测
|
|
168
|
+
- 未经用户明确同意,绝不在 main/master 分支上开始实现
|
|
169
|
+
|
|
170
|
+
## 集成
|
|
171
|
+
|
|
172
|
+
**必需的工作流技能:**
|
|
173
|
+
- **superpowers:using-git-worktrees** - 必需:开始前建立隔离的工作空间
|
|
174
|
+
- **superpowers:writing-plans** - 创建此技能要执行的计划
|
|
175
|
+
- **superpowers:finishing-a-development-branch** - 所有任务完成后收尾开发
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: finishing-a-development-branch
|
|
3
|
+
description: 当实现完成、所有测试通过、需要决定如何集成工作时使用——通过提供合并、PR 或清理等结构化选项来引导开发工作的收尾
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 完成开发分支
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
通过提供清晰的选项并执行所选工作流来引导开发工作的收尾。
|
|
11
|
+
|
|
12
|
+
**核心原则:** 验证测试 → 展示选项 → 执行选择 → 清理。
|
|
13
|
+
|
|
14
|
+
**开始时宣布:** "我正在使用 finishing-a-development-branch 技能来完成这项工作。"
|
|
15
|
+
|
|
16
|
+
## 流程
|
|
17
|
+
|
|
18
|
+
### 步骤 1:验证测试
|
|
19
|
+
|
|
20
|
+
**在展示选项之前,验证测试通过:**
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 运行项目的测试套件
|
|
24
|
+
npm test / cargo test / pytest / go test ./...
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**如果测试失败:**
|
|
28
|
+
```
|
|
29
|
+
测试失败(<N> 个失败)。必须先修复才能继续:
|
|
30
|
+
|
|
31
|
+
[显示失败信息]
|
|
32
|
+
|
|
33
|
+
在测试通过之前无法进行合并/PR。
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
停止。不要继续到步骤 2。
|
|
37
|
+
|
|
38
|
+
**如果测试通过:** 继续步骤 2。
|
|
39
|
+
|
|
40
|
+
### 步骤 2:确定基础分支
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# 尝试常见的基础分支
|
|
44
|
+
git merge-base HEAD main 2>/dev/null || git merge-base HEAD master 2>/dev/null
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
或者询问:"这个分支是从 main 分出来的——对吗?"
|
|
48
|
+
|
|
49
|
+
### 步骤 3:展示选项
|
|
50
|
+
|
|
51
|
+
展示以下 4 个选项:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
实现已完成。你想怎么做?
|
|
55
|
+
|
|
56
|
+
1. 在本地合并回 <base-branch>
|
|
57
|
+
2. 推送并创建 Pull Request
|
|
58
|
+
3. 保持分支现状(我稍后处理)
|
|
59
|
+
4. 丢弃这项工作
|
|
60
|
+
|
|
61
|
+
选哪个?
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**不要添加解释** - 保持选项简洁。
|
|
65
|
+
|
|
66
|
+
### 步骤 4:执行选择
|
|
67
|
+
|
|
68
|
+
#### 选项 1:本地合并
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
# 切换到基础分支
|
|
72
|
+
git checkout <base-branch>
|
|
73
|
+
|
|
74
|
+
# 拉取最新代码
|
|
75
|
+
git pull
|
|
76
|
+
|
|
77
|
+
# 合并功能分支
|
|
78
|
+
git merge <feature-branch>
|
|
79
|
+
|
|
80
|
+
# 在合并结果上验证测试
|
|
81
|
+
<test command>
|
|
82
|
+
|
|
83
|
+
# 如果测试通过
|
|
84
|
+
git branch -d <feature-branch>
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
然后:清理工作树(步骤 5)
|
|
88
|
+
|
|
89
|
+
#### 选项 2:推送并创建 PR
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
# 推送分支
|
|
93
|
+
git push -u origin <feature-branch>
|
|
94
|
+
|
|
95
|
+
# 创建 PR
|
|
96
|
+
gh pr create --title "<title>" --body "$(cat <<'EOF'
|
|
97
|
+
## 摘要
|
|
98
|
+
<2-3 条变更要点>
|
|
99
|
+
|
|
100
|
+
## 测试计划
|
|
101
|
+
- [ ] <验证步骤>
|
|
102
|
+
EOF
|
|
103
|
+
)"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
然后:清理工作树(步骤 5)
|
|
107
|
+
|
|
108
|
+
#### 选项 3:保持现状
|
|
109
|
+
|
|
110
|
+
报告:"保留分支 <name>。工作树保留在 <path>。"
|
|
111
|
+
|
|
112
|
+
**不要清理工作树。**
|
|
113
|
+
|
|
114
|
+
#### 选项 4:丢弃
|
|
115
|
+
|
|
116
|
+
**先确认:**
|
|
117
|
+
```
|
|
118
|
+
这将永久删除:
|
|
119
|
+
- 分支 <name>
|
|
120
|
+
- 所有提交:<commit-list>
|
|
121
|
+
- 工作树 <path>
|
|
122
|
+
|
|
123
|
+
输入 'discard' 确认。
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
等待精确的确认。
|
|
127
|
+
|
|
128
|
+
确认后:
|
|
129
|
+
```bash
|
|
130
|
+
git checkout <base-branch>
|
|
131
|
+
git branch -D <feature-branch>
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
然后:清理工作树(步骤 5)
|
|
135
|
+
|
|
136
|
+
### 步骤 5:清理工作树
|
|
137
|
+
|
|
138
|
+
**对于选项 1、2、4:**
|
|
139
|
+
|
|
140
|
+
检查是否在工作树中:
|
|
141
|
+
```bash
|
|
142
|
+
git worktree list | grep $(git branch --show-current)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
如果是:
|
|
146
|
+
```bash
|
|
147
|
+
git worktree remove <worktree-path>
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
**对于选项 3:** 保留工作树。
|
|
151
|
+
|
|
152
|
+
## 快速参考
|
|
153
|
+
|
|
154
|
+
| 选项 | 合并 | 推送 | 保留工作树 | 清理分支 |
|
|
155
|
+
|------|------|------|-----------|---------|
|
|
156
|
+
| 1. 本地合并 | ✓ | - | - | ✓ |
|
|
157
|
+
| 2. 创建 PR | - | ✓ | ✓ | - |
|
|
158
|
+
| 3. 保持现状 | - | - | ✓ | - |
|
|
159
|
+
| 4. 丢弃 | - | - | - | ✓(强制) |
|
|
160
|
+
|
|
161
|
+
## 常见错误
|
|
162
|
+
|
|
163
|
+
**跳过测试验证**
|
|
164
|
+
- **问题:** 合并损坏的代码、创建失败的 PR
|
|
165
|
+
- **修复:** 在提供选项前始终验证测试
|
|
166
|
+
|
|
167
|
+
**开放式问题**
|
|
168
|
+
- **问题:** "接下来该做什么?" → 含糊不清
|
|
169
|
+
- **修复:** 准确展示 4 个结构化选项
|
|
170
|
+
|
|
171
|
+
**自动清理工作树**
|
|
172
|
+
- **问题:** 在可能还需要工作树时就删除了(选项 2、3)
|
|
173
|
+
- **修复:** 只在选项 1 和 4 时清理
|
|
174
|
+
|
|
175
|
+
**丢弃时不确认**
|
|
176
|
+
- **问题:** 意外删除工作成果
|
|
177
|
+
- **修复:** 要求输入 "discard" 确认
|
|
178
|
+
|
|
179
|
+
## 红线
|
|
180
|
+
|
|
181
|
+
**绝不:**
|
|
182
|
+
- 在测试失败时继续
|
|
183
|
+
- 合并前不验证测试结果
|
|
184
|
+
- 不确认就删除工作成果
|
|
185
|
+
- 未经明确请求就强制推送
|
|
186
|
+
|
|
187
|
+
**始终:**
|
|
188
|
+
- 在提供选项前验证测试
|
|
189
|
+
- 准确展示 4 个选项
|
|
190
|
+
- 选项 4 要求输入确认
|
|
191
|
+
- 只在选项 1 和 4 时清理工作树
|
|
192
|
+
|
|
193
|
+
## 集成
|
|
194
|
+
|
|
195
|
+
**被以下技能调用:**
|
|
196
|
+
- **subagent-driven-development**(步骤 7)- 所有任务完成后
|
|
197
|
+
- **executing-plans**(步骤 5)- 所有批次完成后
|
|
198
|
+
|
|
199
|
+
**配合使用:**
|
|
200
|
+
- **using-git-worktrees** - 清理由该技能创建的工作树
|