@culeo/specx 0.1.1 → 0.1.3
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/specx-fix/SKILL.md +331 -0
package/package.json
CHANGED
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: specx-fix
|
|
3
|
+
description: specx 流程的 bug 修复 skill — 自动判断验收 bug(场景 A)和独立 bug(场景 B),提供根因分析、修复方案、归档沉淀
|
|
4
|
+
category: software-development
|
|
5
|
+
tags: [specx, bugfix, debugging]
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# specx-fix:Bug 修复
|
|
9
|
+
|
|
10
|
+
## 触发条件
|
|
11
|
+
|
|
12
|
+
当用户反馈 bug 相关问题时触发本 skill。不需要用户说特定的关键词,通过上下文自动判断走哪条路径。
|
|
13
|
+
|
|
14
|
+
## 场景判断(自动)
|
|
15
|
+
|
|
16
|
+
| 信号 | 场景 A(验收 bug) | 场景 B(独立 bug) |
|
|
17
|
+
|------|-------------------|-------------------|
|
|
18
|
+
| 当前有活跃子需求 `t-xxx/` | ✅ | — |
|
|
19
|
+
| 当前 git 分支是 feature / 需求分支(如 `t-xxx-*`) | ✅ | — |
|
|
20
|
+
| 问题在最近修改的代码范围内 | ✅ | — |
|
|
21
|
+
| 问题在当前子需求的新功能范围内 | ✅ | — |
|
|
22
|
+
| 当前 git 分支是 `fix/*` 或 `hotfix/*` | — | ✅ |
|
|
23
|
+
| 当前 git 分支是 `main` / `master` / `maintenance` | — | ✅ |
|
|
24
|
+
| 没有进行中的子需求 | — | ✅ |
|
|
25
|
+
| 问题在完全不同的模块 | — | ✅ |
|
|
26
|
+
|
|
27
|
+
**判断逻辑:**
|
|
28
|
+
|
|
29
|
+
```
|
|
30
|
+
IF 有活跃子需求 t-xxx/ AND
|
|
31
|
+
(问题在最近改动范围内 OR git 分支是需求分支 OR 问题在新功能范围内):
|
|
32
|
+
→ 场景 A(验收 bug)
|
|
33
|
+
ELSE:
|
|
34
|
+
→ 场景 B(独立 bug)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 场景 A:验收 Bug(开发过程)
|
|
40
|
+
|
|
41
|
+
### 适用条件
|
|
42
|
+
|
|
43
|
+
当前正在执行 specx 流程,子需求已实现但验收时发现问题。根因可能在 spec、design 或代码实现中。
|
|
44
|
+
|
|
45
|
+
### 流程
|
|
46
|
+
|
|
47
|
+
#### Step A1️⃣ 定位根因环节
|
|
48
|
+
|
|
49
|
+
判断问题出在哪个环节:
|
|
50
|
+
|
|
51
|
+
| 根因位置 | 判断依据 | 修复动作 |
|
|
52
|
+
|----------|---------|---------|
|
|
53
|
+
| **spec 遗漏** | 需求定义本身就没覆盖这个场景 / 边界条件 | 更新 `02-spec.md`,然后补 design,重新执行 |
|
|
54
|
+
| **design 遗漏** | spec 定义了但设计方案没覆盖 | 更新 `03-design.md`(或模板定义的文件),重新执行 |
|
|
55
|
+
| **代码实现错** | spec 和 design 都对,代码写错了 | 直接修代码 |
|
|
56
|
+
|
|
57
|
+
#### Step A2️⃣ 修复
|
|
58
|
+
|
|
59
|
+
1. 根据根因回退到对应环节修复
|
|
60
|
+
2. 更新下游文档(如果上游改了,下游必须同步)
|
|
61
|
+
3. 在子需求目录下创建 bug 修复记录文件:
|
|
62
|
+
|
|
63
|
+
```
|
|
64
|
+
t-xxx/
|
|
65
|
+
├── 00-子需求.md
|
|
66
|
+
├── ...
|
|
67
|
+
├── 04-tasks.md
|
|
68
|
+
└── fix-001-{简短描述}.md ← 新建
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
如果已有 `fix-001`,编号递增为 `fix-002`。
|
|
72
|
+
|
|
73
|
+
##### fix-{编号}-{描述}.md 模板
|
|
74
|
+
|
|
75
|
+
```markdown
|
|
76
|
+
---
|
|
77
|
+
status: draft
|
|
78
|
+
updated: {YYYY-MM-DD}
|
|
79
|
+
history:
|
|
80
|
+
- "v1: 初始创建"
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
# {Bug 描述}
|
|
84
|
+
|
|
85
|
+
## 发现场景
|
|
86
|
+
{验收时发现的问题}
|
|
87
|
+
|
|
88
|
+
## 根因分析
|
|
89
|
+
{定位过程}
|
|
90
|
+
|
|
91
|
+
### 根因环节
|
|
92
|
+
- [ ] spec 遗漏
|
|
93
|
+
- [ ] design 遗漏
|
|
94
|
+
- [ ] 代码实现错
|
|
95
|
+
|
|
96
|
+
## 修复内容
|
|
97
|
+
{描述改了哪些代码或文档}
|
|
98
|
+
|
|
99
|
+
## 验证
|
|
100
|
+
- [ ] 复现步骤不再触发
|
|
101
|
+
- [ ] 相关功能正常
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
#### Step A3️⃣ 回到执行
|
|
105
|
+
|
|
106
|
+
修复完成后,回到 `specx-executing-plans` 继续执行修改后的任务。
|
|
107
|
+
|
|
108
|
+
### 场景 A 不做什么
|
|
109
|
+
|
|
110
|
+
- 不创建新目录
|
|
111
|
+
- 不走独立 bug 的完整文档流程
|
|
112
|
+
- 不归档到 wiki(如果值得归档,等子需求完成时走 archive 流程统一沉淀)
|
|
113
|
+
|
|
114
|
+
---
|
|
115
|
+
|
|
116
|
+
## 场景 B:独立 Bug(线上/历史/日常)
|
|
117
|
+
|
|
118
|
+
### 适用条件
|
|
119
|
+
|
|
120
|
+
- 无当前需求上下文
|
|
121
|
+
- 线上报障、历史代码问题、日常发现
|
|
122
|
+
- 与当前进行中的需求无关
|
|
123
|
+
|
|
124
|
+
### 流程
|
|
125
|
+
|
|
126
|
+
#### Step B1️⃣ 创建 bug 工作空间
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
docs/specx/fixes/
|
|
130
|
+
└── {yyyyMMdd}-{简短描述}/
|
|
131
|
+
├── 00-bug-report.md # bug 描述 & 复现步骤
|
|
132
|
+
├── 01-root-cause.md # 根因分析
|
|
133
|
+
├── 02-fix-plan.md # 修复方案
|
|
134
|
+
└── 03-fix-done.md # 修复验证 & 归档
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
**命名规则:** `{yyyyMMdd}-{3-5单词描述}`,全小写连字符
|
|
138
|
+
|
|
139
|
+
#### Step B2️⃣ 00-bug-report.md:Bug 描述
|
|
140
|
+
|
|
141
|
+
```markdown
|
|
142
|
+
---
|
|
143
|
+
status: draft
|
|
144
|
+
updated: {YYYY-MM-DD}
|
|
145
|
+
history:
|
|
146
|
+
- "v1: 初始创建"
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
# {Bug 描述}
|
|
150
|
+
|
|
151
|
+
## 发现时间
|
|
152
|
+
{YYYY-MM-DD}
|
|
153
|
+
|
|
154
|
+
## 发现场景
|
|
155
|
+
{在哪发现的,如:线上报障、QA 提测、日常使用}
|
|
156
|
+
|
|
157
|
+
## 复现步骤
|
|
158
|
+
1. {步骤1}
|
|
159
|
+
2. {步骤2}
|
|
160
|
+
3. {步骤3}
|
|
161
|
+
|
|
162
|
+
## 预期行为
|
|
163
|
+
{应该是什么}
|
|
164
|
+
|
|
165
|
+
## 实际行为
|
|
166
|
+
{实际是什么}
|
|
167
|
+
|
|
168
|
+
## 影响范围
|
|
169
|
+
- [ ] 阻塞(无临时方案,必须修复)
|
|
170
|
+
- [ ] 重要(有临时方案但影响体验)
|
|
171
|
+
- [ ] 轻微(不影响主要流程)
|
|
172
|
+
|
|
173
|
+
## 截图/日志(如有)
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
#### Step B3️⃣ 01-root-cause.md:根因分析
|
|
177
|
+
|
|
178
|
+
```markdown
|
|
179
|
+
---
|
|
180
|
+
status: draft
|
|
181
|
+
updated: {YYYY-MM-DD}
|
|
182
|
+
history:
|
|
183
|
+
- "v1: 初始创建"
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
# 根因分析
|
|
187
|
+
|
|
188
|
+
## 复现验证
|
|
189
|
+
- [ ] 已确认复现
|
|
190
|
+
|
|
191
|
+
## 定位过程
|
|
192
|
+
{排查步骤记录}
|
|
193
|
+
|
|
194
|
+
## 根因
|
|
195
|
+
|
|
196
|
+
### 直接原因
|
|
197
|
+
{最接近表象的原因,如:空指针、类型不匹配、边界条件缺失}
|
|
198
|
+
|
|
199
|
+
### 根本原因
|
|
200
|
+
{为什么会引入这个 bug,如:spec 未定义边界情况、对 API 行为假设错误、重构遗漏}
|
|
201
|
+
|
|
202
|
+
## 涉及的代码位置
|
|
203
|
+
- {文件路径}:{行号} — {说明}
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
#### Step B4️⃣ 02-fix-plan.md:修复方案
|
|
207
|
+
|
|
208
|
+
```markdown
|
|
209
|
+
---
|
|
210
|
+
status: draft
|
|
211
|
+
updated: {YYYY-MM-DD}
|
|
212
|
+
history:
|
|
213
|
+
- "v1: 初始创建"
|
|
214
|
+
---
|
|
215
|
+
|
|
216
|
+
# 修复方案
|
|
217
|
+
|
|
218
|
+
## 修复策略
|
|
219
|
+
{描述修复方式}
|
|
220
|
+
|
|
221
|
+
## 文件变更
|
|
222
|
+
| 文件 | 操作 | 说明 |
|
|
223
|
+
|------|------|------|
|
|
224
|
+
| {路径} | 修改/新增 | {说明} |
|
|
225
|
+
|
|
226
|
+
## 影响分析
|
|
227
|
+
- [ ] 修复会影响其他模块?哪些?
|
|
228
|
+
- [ ] 需要补充单元测试?
|
|
229
|
+
- [ ] 需要补充集成测试?
|
|
230
|
+
|
|
231
|
+
## 回滚方案
|
|
232
|
+
{如果修复有问题,如何回滚}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
#### Step B5️⃣ 修复执行
|
|
236
|
+
|
|
237
|
+
1. 按修复方案修改代码
|
|
238
|
+
2. 验证修复
|
|
239
|
+
3. 提交代码(建议使用 `fix/` 分支)
|
|
240
|
+
|
|
241
|
+
#### Step B6️⃣ 03-fix-done.md:修复验证 & 归档
|
|
242
|
+
|
|
243
|
+
```markdown
|
|
244
|
+
---
|
|
245
|
+
status: archived
|
|
246
|
+
updated: {YYYY-MM-DD}
|
|
247
|
+
history:
|
|
248
|
+
- "v1: 初始创建"
|
|
249
|
+
- "v2: 修复完成"
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
# 修复验证
|
|
253
|
+
|
|
254
|
+
## 修复内容
|
|
255
|
+
{描述实际改了哪些代码}
|
|
256
|
+
|
|
257
|
+
## 验证结果
|
|
258
|
+
- [ ] 复现步骤不再触发
|
|
259
|
+
- [ ] 相关测试通过
|
|
260
|
+
|
|
261
|
+
## 归档到 wiki
|
|
262
|
+
|
|
263
|
+
### wiki 条目
|
|
264
|
+
docs/specx/wiki/fixes/{slug}.md
|
|
265
|
+
|
|
266
|
+
```markdown
|
|
267
|
+
# {Bug 描述}
|
|
268
|
+
|
|
269
|
+
**发现时间:** {YYYY-MM-DD}
|
|
270
|
+
**根因类型:** {逻辑错误 / 边界遗漏 / 类型不匹配 / 并发问题 / 性能 / 其他}
|
|
271
|
+
|
|
272
|
+
## 根因
|
|
273
|
+
{一句话描述根因}
|
|
274
|
+
|
|
275
|
+
## 修复方式
|
|
276
|
+
{一句话描述修复方式}
|
|
277
|
+
|
|
278
|
+
## 涉及文件
|
|
279
|
+
- {文件}:{行号}
|
|
280
|
+
```
|
|
281
|
+
|
|
282
|
+
### 自检清单
|
|
283
|
+
- [ ] bug-report 和 root-cause 已提炼为 wiki 知识
|
|
284
|
+
- [ ] fix-done 状态为 `archived`
|
|
285
|
+
- [ ] 相关文档状态已更新
|
|
286
|
+
- [ ] 代码已提交
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
#### Step B7️⃣ 更新 fixes 目录索引
|
|
290
|
+
|
|
291
|
+
首次使用 `fixes/` 时,在 `docs/specx/fixes/README.md` 创建索引:
|
|
292
|
+
|
|
293
|
+
```markdown
|
|
294
|
+
# Bug 修复记录
|
|
295
|
+
|
|
296
|
+
| 日期 | 描述 | 根因类型 | 影响范围 | 状态 |
|
|
297
|
+
|------|------|---------|---------|------|
|
|
298
|
+
| {YYYY-MM-DD} | {描述} | {类型} | {阻塞/重要/轻微} | ✅ |
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
后续每次修复完成,在表格顶部插入新行。
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## 公共检查清单
|
|
306
|
+
|
|
307
|
+
修复完成后确认:
|
|
308
|
+
|
|
309
|
+
- [ ] bug 已修复并验证
|
|
310
|
+
- [ ] 根因已明确记录(区分直接原因和根本原因)
|
|
311
|
+
- [ ] 修复不会引入新的问题
|
|
312
|
+
- [ ] 相关测试已补充(如有必要)
|
|
313
|
+
- [ ] 场景 B 已归档到 wiki
|
|
314
|
+
|
|
315
|
+
## 与现有 specx skill 的关系
|
|
316
|
+
|
|
317
|
+
| 当前流程 | 对应动作 |
|
|
318
|
+
|----------|---------|
|
|
319
|
+
| executing-plans 发现代码实现错 → 场景 A 走代码修复 | 直接在当前子需求修复 |
|
|
320
|
+
| 验收发现 spec 遗漏 → 场景 A 走 spec 回退 | 更新 clarify/spec/design |
|
|
321
|
+
| 验收发现 design 遗漏 → 场景 A 走 design 回退 | 更新 design 文档,重新执行 |
|
|
322
|
+
| 用户报线上 bug → 场景 B | 完整流程 |
|
|
323
|
+
| 日常发现历史代码 bug → 场景 B | 完整流程 |
|
|
324
|
+
|
|
325
|
+
## 重要提示
|
|
326
|
+
|
|
327
|
+
- **场景 A 不要过度流程化** — 验收中发现的代码小 bug,定位到根因后快速修掉,不需要走完整 fixes/ 目录。记录到当前子需求即可
|
|
328
|
+
- **场景 B 必须归档到 wiki** — 独立 bug 是项目知识的重要组成部分
|
|
329
|
+
- **区分直接原因和根本原因** — 直接原因是"表象"(空指针),根本原因是"为什么会引入"(spec 未定义边界)
|
|
330
|
+
- **频繁出现同类 bug** → 考虑用 specx-create-rule 建立编码规范
|
|
331
|
+
- **场景判断有歧义时** → 走场景 B(独立 bug 流程更完整,多走流程比漏走好)
|