sdd-full 1.0.0 → 1.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/README.md +84 -39
- package/index.js +163 -29
- package/package.json +27 -11
- package/skills/README.md +75 -0
- package/skills/brainstorming/SKILL.md +164 -0
- package/skills/claudeception/SKILL.md +94 -0
- package/skills/competitive-brief/SKILL.md +119 -0
- package/skills/finishing-a-development-branch/SKILL.md +200 -0
- package/skills/market-research/SKILL.md +141 -0
- package/skills/mempalace-auto-saver/SKILL.md +300 -0
- package/skills/prd-write/SKILL.md +109 -0
- package/skills/quality-gate/SKILL.md +348 -0
- package/skills/receiving-code-review/SKILL.md +213 -0
- package/skills/release-flow/SKILL.md +402 -0
- package/skills/requesting-code-review/SKILL.md +105 -0
- package/skills/requirement-completion-officer/SKILL.md +122 -0
- package/skills/sdd/SKILL.md +1042 -0
- package/skills/sdd-add/SKILL.md +538 -0
- package/skills/sdd-code/SKILL.md +345 -0
- package/skills/sdd-deploy/SKILL.md +499 -0
- package/skills/sdd-full/SKILL.md +734 -0
- package/skills/sdd-ops/SKILL.md +304 -0
- package/skills/sdd-test/SKILL.md +381 -0
- package/skills/security-audit/SKILL.md +384 -0
- package/skills/systematic-debugging/SKILL.md +296 -0
- package/skills/test-driven-development/SKILL.md +371 -0
- package/skills/ui-sdd/SKILL.md +290 -0
- package/skills/unified-flow/SKILL.md +146 -0
- package/skills/using-superpowers/SKILL.md +115 -0
- package/skills/verification-before-completion/SKILL.md +139 -0
- package/skills/writing-plans/SKILL.md +142 -0
- package/skills//345/256/214/346/225/264/345/274/200/345/217/221/346/265/201/347/250/213/346/211/213/345/206/214.md +349 -0
- package/skills//346/212/200/350/203/275/344/275/223/347/263/273/345/256/214/345/226/204/345/273/272/350/256/256.md +244 -0
- package/skills//346/212/200/350/203/275/344/275/277/347/224/250/346/214/207/345/215/227.md +225 -0
- package/skills//346/212/200/350/203/275/345/206/263/347/255/226/346/240/221.md +235 -0
- package/skills-data.js +0 -107
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: "security-audit"
|
|
3
|
+
description: "安全审计技能,分析安全需求、设计安全架构、执行安全检查。Invoke when you need to do security audit and hardening."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# security-audit - 安全审计技能
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
本技能专注于系统安全审计和加固,包含安全需求分析、安全架构设计、安全检查清单、渗透测试方案、漏洞修复流程、安全培训等。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 与其他技能的衔接
|
|
15
|
+
|
|
16
|
+
### 前置技能
|
|
17
|
+
- **sdd**(安全需求分析)
|
|
18
|
+
- **quality-gate**(安全检查)
|
|
19
|
+
|
|
20
|
+
### 后置技能
|
|
21
|
+
- 安全持续改进
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## 核心功能
|
|
26
|
+
|
|
27
|
+
### 1. 安全需求分析
|
|
28
|
+
- 数据安全需求(加密、脱敏、备份)
|
|
29
|
+
- 认证授权需求(登录、权限、会话)
|
|
30
|
+
- 接口安全需求(鉴权、限流、防攻击)
|
|
31
|
+
- 合规性需求(等保、GDPR等)
|
|
32
|
+
- 安全分级(按资产重要程度)
|
|
33
|
+
|
|
34
|
+
### 2. 安全架构设计
|
|
35
|
+
- 安全架构设计(分层防御、纵深防御)
|
|
36
|
+
- 认证方案设计(密码、OAuth、SAML、生物认证)
|
|
37
|
+
- 权限模型设计(RBAC、ABAC等)
|
|
38
|
+
- 数据加密方案(传输加密、存储加密)
|
|
39
|
+
- 安全监控设计(日志、告警、审计)
|
|
40
|
+
|
|
41
|
+
### 3. 安全检查清单
|
|
42
|
+
- OWASP Top 10检查清单
|
|
43
|
+
- 代码安全检查清单
|
|
44
|
+
- 配置安全检查清单
|
|
45
|
+
- 依赖安全检查清单
|
|
46
|
+
- 运维安全检查清单
|
|
47
|
+
|
|
48
|
+
### 4. 渗透测试方案
|
|
49
|
+
- 渗透测试计划
|
|
50
|
+
- 测试范围定义
|
|
51
|
+
- 测试方法选择
|
|
52
|
+
- 测试用例设计
|
|
53
|
+
- 风险分级
|
|
54
|
+
|
|
55
|
+
### 5. 漏洞修复流程
|
|
56
|
+
- 漏洞分级(Critical/High/Medium/Low)
|
|
57
|
+
- 修复时限要求
|
|
58
|
+
- 修复方案设计
|
|
59
|
+
- 修复验证方法
|
|
60
|
+
- 应急响应流程
|
|
61
|
+
|
|
62
|
+
### 6. 安全培训材料
|
|
63
|
+
- 开发安全培训
|
|
64
|
+
- 运维安全培训
|
|
65
|
+
- 员工安全意识培训
|
|
66
|
+
- 常见攻击识别和防范
|
|
67
|
+
- 应急响应培训
|
|
68
|
+
|
|
69
|
+
---
|
|
70
|
+
|
|
71
|
+
## 产出文件结构
|
|
72
|
+
|
|
73
|
+
### 安全审计目录
|
|
74
|
+
```
|
|
75
|
+
docs/
|
|
76
|
+
└── security/
|
|
77
|
+
├── requirements.md # 安全需求
|
|
78
|
+
├── architecture.md # 安全架构
|
|
79
|
+
├── checklist.md # 检查清单
|
|
80
|
+
├── pentest-plan.md # 渗透测试方案
|
|
81
|
+
├── vulnerability-fix.md # 漏洞修复流程
|
|
82
|
+
└── training.md # 安全培训
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
---
|
|
86
|
+
|
|
87
|
+
## 安全审计模板
|
|
88
|
+
|
|
89
|
+
### 安全需求分析模板
|
|
90
|
+
```markdown
|
|
91
|
+
# 安全需求分析
|
|
92
|
+
|
|
93
|
+
## 1. 资产清单
|
|
94
|
+
| 资产名称 | 重要程度 | 风险等级 | 说明 |
|
|
95
|
+
|---------|---------|---------|------|
|
|
96
|
+
| 用户数据 | Critical | 高 | 包含手机号、邮箱、密码等 |
|
|
97
|
+
| 订单数据 | High | 中高 | 包含交易记录 |
|
|
98
|
+
| 系统配置 | Medium | 中 | 包含敏感配置 |
|
|
99
|
+
|
|
100
|
+
## 2. 安全需求
|
|
101
|
+
|
|
102
|
+
### 数据安全
|
|
103
|
+
- [ ] 敏感数据加密存储
|
|
104
|
+
- [ ] 敏感数据传输加密(TLS)
|
|
105
|
+
- [ ] 敏感数据脱敏显示
|
|
106
|
+
- [ ] 数据备份加密
|
|
107
|
+
- [ ] 数据访问审计日志
|
|
108
|
+
|
|
109
|
+
### 认证授权
|
|
110
|
+
- [ ] 强密码策略
|
|
111
|
+
- [ ] 多因素认证(可选)
|
|
112
|
+
- [ ] 会话超时控制
|
|
113
|
+
- [ ] 权限最小化原则
|
|
114
|
+
- [ ] 权限变更审计
|
|
115
|
+
|
|
116
|
+
### 接口安全
|
|
117
|
+
- [ ] 接口鉴权
|
|
118
|
+
- [ ] 接口限流
|
|
119
|
+
- [ ] 防SQL注入
|
|
120
|
+
- [ ] 防XSS攻击
|
|
121
|
+
- [ ] 防CSRF攻击
|
|
122
|
+
|
|
123
|
+
### 合规性
|
|
124
|
+
- [ ] 符合等保要求
|
|
125
|
+
- [ ] 符合GDPR(如需要)
|
|
126
|
+
- [ ] 符合其他行业标准
|
|
127
|
+
|
|
128
|
+
## 3. 风险评估
|
|
129
|
+
| 风险 | 等级 | 可能性 | 影响 | 应对措施 |
|
|
130
|
+
|-----|------|-------|------|---------|
|
|
131
|
+
| 数据泄露 | Critical | 低 | 极高 | 加密、访问控制、监控 |
|
|
132
|
+
| 未授权访问 | High | 中 | 高 | 强认证、权限控制 |
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
### 安全检查清单模板
|
|
138
|
+
```markdown
|
|
139
|
+
# 安全检查清单
|
|
140
|
+
|
|
141
|
+
## OWASP Top 10检查
|
|
142
|
+
|
|
143
|
+
### A01:2021 - Broken Access Control
|
|
144
|
+
- [ ] 权限验证正确实现
|
|
145
|
+
- [ ] 垂直权限隔离正确
|
|
146
|
+
- [ ] 水平权限隔离正确
|
|
147
|
+
- [ ] 敏感接口有权限控制
|
|
148
|
+
|
|
149
|
+
### A02:2021 - Cryptographic Failures
|
|
150
|
+
- [ ] 敏感数据加密存储
|
|
151
|
+
- [ ] 使用强加密算法
|
|
152
|
+
- [ ] 密钥管理安全
|
|
153
|
+
- [ ] TLS正确配置
|
|
154
|
+
|
|
155
|
+
### A03:2021 - Injection
|
|
156
|
+
- [ ] 所有查询参数化
|
|
157
|
+
- [ ] 防止SQL注入
|
|
158
|
+
- [ ] 防止XSS注入
|
|
159
|
+
- [ ] 防止其他注入
|
|
160
|
+
|
|
161
|
+
### A04:2021 - Insecure Design
|
|
162
|
+
- [ ] 有安全威胁建模
|
|
163
|
+
- [ ] 安全需求明确
|
|
164
|
+
- [ ] 有安全架构设计
|
|
165
|
+
|
|
166
|
+
### A05:2021 - Security Misconfiguration
|
|
167
|
+
- [ ] 安全配置正确
|
|
168
|
+
- [ ] 不必要的功能禁用
|
|
169
|
+
- [ ] 默认密码已修改
|
|
170
|
+
- [ ] 错误信息不泄露细节
|
|
171
|
+
|
|
172
|
+
### A06:2021 - Vulnerable and Outdated Components
|
|
173
|
+
- [ ] 依赖定期扫描
|
|
174
|
+
- [ ] 高危依赖已修复
|
|
175
|
+
- [ ] 不再使用的依赖已移除
|
|
176
|
+
- [ ] 依赖更新策略
|
|
177
|
+
|
|
178
|
+
### A07:2021 - Identification and Authentication Failures
|
|
179
|
+
- [ ] 认证实现正确
|
|
180
|
+
- [ ] 会话管理安全
|
|
181
|
+
- [ ] 凭据存储安全
|
|
182
|
+
- [ ] 有防止暴力破解措施
|
|
183
|
+
|
|
184
|
+
### A08:2021 - Software and Data Integrity Failures
|
|
185
|
+
- [ ] 数据完整性校验
|
|
186
|
+
- [ ] 第三方来源可信
|
|
187
|
+
- [ ] 有完整性验证机制
|
|
188
|
+
|
|
189
|
+
### A09:2021 - Security Logging and Monitoring Failures
|
|
190
|
+
- [ ] 关键操作有日志
|
|
191
|
+
- [ ] 安全事件有告警
|
|
192
|
+
- [ ] 日志内容完整
|
|
193
|
+
- [ ] 日志存储安全
|
|
194
|
+
|
|
195
|
+
### A10:2021 - Server-Side Request Forgery
|
|
196
|
+
- [ ] 防止SSRF攻击
|
|
197
|
+
- [ ] 外网请求有控制
|
|
198
|
+
- [ ] URL验证正确
|
|
199
|
+
|
|
200
|
+
## 代码安全检查
|
|
201
|
+
- [ ] 无硬编码密钥
|
|
202
|
+
- [ ] 无SQL注入风险
|
|
203
|
+
- [ ] 无XSS风险
|
|
204
|
+
- [ ] 输入验证完整
|
|
205
|
+
- [ ] 输出编码正确
|
|
206
|
+
|
|
207
|
+
## 配置安全检查
|
|
208
|
+
- [ ] 生产环境配置安全
|
|
209
|
+
- [ ] 不必要的端口已关闭
|
|
210
|
+
- [ ] 服务以最小权限运行
|
|
211
|
+
- [ ] 防火墙规则正确
|
|
212
|
+
|
|
213
|
+
## 依赖安全检查
|
|
214
|
+
- [ ] 依赖漏洞已扫描
|
|
215
|
+
- [ ] 高危漏洞已修复
|
|
216
|
+
- [ ] 依赖定期更新
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
---
|
|
220
|
+
|
|
221
|
+
### 渗透测试方案模板
|
|
222
|
+
```markdown
|
|
223
|
+
# 渗透测试方案
|
|
224
|
+
|
|
225
|
+
## 1. 测试概述
|
|
226
|
+
- 测试目标
|
|
227
|
+
- 测试范围
|
|
228
|
+
- 测试时间
|
|
229
|
+
- 测试人员
|
|
230
|
+
|
|
231
|
+
## 2. 测试方法
|
|
232
|
+
- 黑盒测试/白盒测试
|
|
233
|
+
- 测试工具选择
|
|
234
|
+
- 测试策略
|
|
235
|
+
|
|
236
|
+
## 3. 测试范围
|
|
237
|
+
|
|
238
|
+
### 测试范围
|
|
239
|
+
- 测试的系统/应用
|
|
240
|
+
- 测试的接口
|
|
241
|
+
- 测试的功能模块
|
|
242
|
+
|
|
243
|
+
### 不测试范围
|
|
244
|
+
- 生产环境直接攻击(用测试环境)
|
|
245
|
+
- 可能导致服务不可用的测试(提前沟通)
|
|
246
|
+
|
|
247
|
+
## 4. 测试用例
|
|
248
|
+
| 用例ID | 测试项 | 测试方法 | 预期结果 |
|
|
249
|
+
|-------|--------|---------|---------|
|
|
250
|
+
| TC-001 | SQL注入 | 尝试注入 | 无注入漏洞 |
|
|
251
|
+
| TC-002 | XSS | 尝试注入脚本 | 无XSS漏洞 |
|
|
252
|
+
| ... | ... | ... | ... |
|
|
253
|
+
|
|
254
|
+
## 5. 风险分级
|
|
255
|
+
| 等级 | 说明 | 处理时限 |
|
|
256
|
+
|-----|------|---------|
|
|
257
|
+
| Critical | 严重漏洞,可导致数据泄露或系统控制 | 24小时内修复 |
|
|
258
|
+
| High | 高危漏洞 | 3天内修复 |
|
|
259
|
+
| Medium | 中危漏洞 | 1周内修复 |
|
|
260
|
+
| Low | 低危漏洞 | 1个月内修复 |
|
|
261
|
+
|
|
262
|
+
## 6. 测试计划
|
|
263
|
+
| 阶段 | 时间 | 内容 |
|
|
264
|
+
|-----|------|------|
|
|
265
|
+
| 阶段1 | ... | 信息收集 |
|
|
266
|
+
| 阶段2 | ... | 漏洞扫描 |
|
|
267
|
+
| 阶段3 | ... | 手动测试 |
|
|
268
|
+
| 阶段4 | ... | 报告编写 |
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
---
|
|
272
|
+
|
|
273
|
+
### 漏洞修复流程模板
|
|
274
|
+
```markdown
|
|
275
|
+
# 漏洞修复流程
|
|
276
|
+
|
|
277
|
+
## 1. 漏洞上报
|
|
278
|
+
- 漏洞描述
|
|
279
|
+
- 漏洞等级
|
|
280
|
+
- 影响范围
|
|
281
|
+
- 上报时间
|
|
282
|
+
- 上报人
|
|
283
|
+
|
|
284
|
+
## 2. 漏洞确认
|
|
285
|
+
- 验证漏洞真实性
|
|
286
|
+
- 确认漏洞影响
|
|
287
|
+
- 评估风险等级
|
|
288
|
+
- 确认修复优先级
|
|
289
|
+
|
|
290
|
+
## 3. 修复方案设计
|
|
291
|
+
- 修复方案选择
|
|
292
|
+
- 修复方案评估
|
|
293
|
+
- 回滚方案准备
|
|
294
|
+
- 修复时间计划
|
|
295
|
+
|
|
296
|
+
## 4. 修复实施
|
|
297
|
+
- 代码修复
|
|
298
|
+
- 配置修复
|
|
299
|
+
- 测试验证
|
|
300
|
+
- 代码评审
|
|
301
|
+
|
|
302
|
+
## 5. 发布上线
|
|
303
|
+
- 修复上线计划
|
|
304
|
+
- 灰度发布
|
|
305
|
+
- 监控观察
|
|
306
|
+
- 完整验证
|
|
307
|
+
|
|
308
|
+
## 6. 复盘总结
|
|
309
|
+
- 漏洞根因分析
|
|
310
|
+
- 预防措施
|
|
311
|
+
- 流程改进
|
|
312
|
+
- 经验教训
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## 使用步骤
|
|
318
|
+
|
|
319
|
+
### 步骤1:安全需求分析
|
|
320
|
+
- 识别系统资产
|
|
321
|
+
- 分析安全需求
|
|
322
|
+
- 评估安全风险
|
|
323
|
+
- 确定安全目标
|
|
324
|
+
|
|
325
|
+
### 步骤2:安全架构设计
|
|
326
|
+
- 设计安全架构
|
|
327
|
+
- 选择安全方案
|
|
328
|
+
- 制定安全规范
|
|
329
|
+
- 设计安全监控
|
|
330
|
+
|
|
331
|
+
### 步骤3:安全检查
|
|
332
|
+
- 执行安全检查清单
|
|
333
|
+
- 代码安全扫描
|
|
334
|
+
- 依赖安全扫描
|
|
335
|
+
- 配置安全检查
|
|
336
|
+
|
|
337
|
+
### 步骤4:渗透测试(可选)
|
|
338
|
+
- 制定渗透测试方案
|
|
339
|
+
- 执行渗透测试
|
|
340
|
+
- 生成测试报告
|
|
341
|
+
- 制定修复计划
|
|
342
|
+
|
|
343
|
+
### 步骤5:漏洞修复
|
|
344
|
+
- 按优先级修复漏洞
|
|
345
|
+
- 验证修复效果
|
|
346
|
+
- 复盘总结
|
|
347
|
+
- 持续改进
|
|
348
|
+
|
|
349
|
+
---
|
|
350
|
+
|
|
351
|
+
## 与其他技能的集成
|
|
352
|
+
|
|
353
|
+
### 与quality-gate集成
|
|
354
|
+
```
|
|
355
|
+
security-audit → 安全检查清单 → quality-gate → 安全检查
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
### 与sdd-test集成
|
|
359
|
+
```
|
|
360
|
+
security-audit → 安全测试SDD → sdd-test → 安全测试
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
---
|
|
364
|
+
|
|
365
|
+
## 最佳实践
|
|
366
|
+
|
|
367
|
+
1. **安全左移:** 开发阶段就考虑安全,不要等上线后再补
|
|
368
|
+
2. **纵深防御:** 不要只依赖单一安全措施,多层防护
|
|
369
|
+
3. **最小权限:** 只给必要的权限,权限最小化原则
|
|
370
|
+
4. **定期审计:** 定期执行安全检查,不要一次就完
|
|
371
|
+
5. **全员重视:** 安全不只是安全团队的事,全员要有安全意识
|
|
372
|
+
|
|
373
|
+
---
|
|
374
|
+
|
|
375
|
+
## 常见问题
|
|
376
|
+
|
|
377
|
+
### Q:需要做渗透测试吗?
|
|
378
|
+
A:核心业务、敏感数据系统建议定期做;一般系统可以先用自动化工具扫描。
|
|
379
|
+
|
|
380
|
+
### Q:发现高危漏洞怎么办?
|
|
381
|
+
A:按应急响应流程,快速评估影响,先做临时防护,再彻底修复,修复后验证,最后复盘。
|
|
382
|
+
|
|
383
|
+
### Q:如何平衡安全和用户体验?
|
|
384
|
+
A:在保证安全的前提下尽量不影响体验,选择对用户影响小的安全方案,做好用户引导。
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: systematic-debugging
|
|
3
|
+
description: 在遇到任何错误、测试失败或意外行为时使用,在提出修复方案之前
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 系统性调试
|
|
7
|
+
|
|
8
|
+
## 概述
|
|
9
|
+
|
|
10
|
+
随机修复浪费时间并创建新错误。快速补丁掩盖潜在问题。
|
|
11
|
+
|
|
12
|
+
**核心原则:** 在尝试修复之前始终找到根本原因。症状修复是失败。
|
|
13
|
+
|
|
14
|
+
**违反此流程的字面意思就是违反调试的精神。**
|
|
15
|
+
|
|
16
|
+
## 铁律
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
没有根本原因调查,就没有修复
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
如果你还没有完成第 1 阶段,你不能提出修复方案。
|
|
23
|
+
|
|
24
|
+
## 何时使用
|
|
25
|
+
|
|
26
|
+
用于任何技术问题:
|
|
27
|
+
- 测试失败
|
|
28
|
+
- 生产中的错误
|
|
29
|
+
- 意外行为
|
|
30
|
+
- 性能问题
|
|
31
|
+
- 构建失败
|
|
32
|
+
- 集成问题
|
|
33
|
+
|
|
34
|
+
**特别使用当:**
|
|
35
|
+
- 在时间压力下(紧急情况使猜测变得诱人)
|
|
36
|
+
- "只需一个快速修复"看起来很明显
|
|
37
|
+
- 你已经尝试了多个修复
|
|
38
|
+
- 之前的修复不起作用
|
|
39
|
+
- 你不完全理解问题
|
|
40
|
+
|
|
41
|
+
**不要跳过当:**
|
|
42
|
+
- 问题看起来简单(简单错误也有根本原因)
|
|
43
|
+
- 你很匆忙(匆忙保证返工)
|
|
44
|
+
- 经理希望立即修复(系统性比混乱更快)
|
|
45
|
+
|
|
46
|
+
## 四个阶段
|
|
47
|
+
|
|
48
|
+
你必须完成每个阶段才能进入下一个阶段。
|
|
49
|
+
|
|
50
|
+
### 阶段 1:根本原因调查
|
|
51
|
+
|
|
52
|
+
**在尝试任何修复之前:**
|
|
53
|
+
|
|
54
|
+
1. **仔细阅读错误消息**
|
|
55
|
+
- 不要跳过错误或警告
|
|
56
|
+
- 它们通常包含确切的解决方案
|
|
57
|
+
- 完全阅读堆栈跟踪
|
|
58
|
+
- 注意行号、文件路径、错误代码
|
|
59
|
+
|
|
60
|
+
2. **一致地重现**
|
|
61
|
+
- 你能可靠地触发它吗?
|
|
62
|
+
- 确切的步骤是什么?
|
|
63
|
+
- 它每次都会发生吗?
|
|
64
|
+
- 如果不可重现 → 收集更多数据,不要猜测
|
|
65
|
+
|
|
66
|
+
3. **检查最近的更改**
|
|
67
|
+
- 什么更改可能导致此问题?
|
|
68
|
+
- Git diff,最近的提交
|
|
69
|
+
- 新依赖项,配置更改
|
|
70
|
+
- 环境差异
|
|
71
|
+
|
|
72
|
+
4. **在多组件系统中收集证据**
|
|
73
|
+
|
|
74
|
+
**当系统有多个组件时(CI → 构建 → 签名,API → 服务 → 数据库):**
|
|
75
|
+
|
|
76
|
+
**在提出修复之前,添加诊断工具:**
|
|
77
|
+
```
|
|
78
|
+
对于每个组件边界:
|
|
79
|
+
- 记录什么数据进入组件
|
|
80
|
+
- 记录什么数据离开组件
|
|
81
|
+
- 验证环境/配置传播
|
|
82
|
+
- 检查每层的状态
|
|
83
|
+
|
|
84
|
+
运行一次以收集显示它在哪里中断的证据
|
|
85
|
+
然后分析证据以识别失败的组件
|
|
86
|
+
然后调查该特定组件
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
**示例(多层系统):**
|
|
90
|
+
```bash
|
|
91
|
+
# 第 1 层:工作流
|
|
92
|
+
echo "=== 工作流中可用的密钥:==="
|
|
93
|
+
echo "IDENTITY: ${IDENTITY:+SET}${IDENTITY:-UNSET}"
|
|
94
|
+
|
|
95
|
+
# 第 2 层:构建脚本
|
|
96
|
+
echo "=== 构建脚本中的环境变量:==="
|
|
97
|
+
env | grep IDENTITY || echo "IDENTITY 不在环境中"
|
|
98
|
+
|
|
99
|
+
# 第 3 层:签名脚本
|
|
100
|
+
echo "=== 钥匙串状态:==="
|
|
101
|
+
security list-keychains
|
|
102
|
+
security find-identity -v
|
|
103
|
+
|
|
104
|
+
# 第 4 层:实际签名
|
|
105
|
+
codesign --sign "$IDENTITY" --verbose=4 "$APP"
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
**这揭示:** 哪一层失败(密钥 → 工作流 ✓,工作流 → 构建 ✗)
|
|
109
|
+
|
|
110
|
+
5. **跟踪数据流**
|
|
111
|
+
|
|
112
|
+
**当错误在调用堆栈深处时:**
|
|
113
|
+
|
|
114
|
+
请参阅此目录中的 `root-cause-tracing.md` 了解完整的向后跟踪技术。
|
|
115
|
+
|
|
116
|
+
**快速版本:**
|
|
117
|
+
- 坏值源自哪里?
|
|
118
|
+
- 什么用坏值调用了这个?
|
|
119
|
+
- 继续向上跟踪直到找到源
|
|
120
|
+
- 在源处修复,而不是在症状处
|
|
121
|
+
|
|
122
|
+
### 阶段 2:模式分析
|
|
123
|
+
|
|
124
|
+
**在修复前找到模式:**
|
|
125
|
+
|
|
126
|
+
1. **找到工作示例**
|
|
127
|
+
- 在同一代码库中定位类似的工作代码
|
|
128
|
+
- 什么与损坏的代码类似但能工作?
|
|
129
|
+
|
|
130
|
+
2. **与参考进行比较**
|
|
131
|
+
- 如果实现模式,完全阅读参考实现
|
|
132
|
+
- 不要浏览 - 阅读每一行
|
|
133
|
+
- 在应用前完全理解模式
|
|
134
|
+
|
|
135
|
+
3. **识别差异**
|
|
136
|
+
- 工作的和损坏的之间有什么不同?
|
|
137
|
+
- 列出每个差异,无论多小
|
|
138
|
+
- 不要假设"那不重要"
|
|
139
|
+
|
|
140
|
+
4. **理解依赖关系**
|
|
141
|
+
- 这需要其他哪些组件?
|
|
142
|
+
- 需要什么设置、配置、环境?
|
|
143
|
+
- 它做了什么假设?
|
|
144
|
+
|
|
145
|
+
### 阶段 3:假设和测试
|
|
146
|
+
|
|
147
|
+
**科学方法:**
|
|
148
|
+
|
|
149
|
+
1. **形成单一假设**
|
|
150
|
+
- 明确说明:"我认为 X 是根本原因,因为 Y"
|
|
151
|
+
- 写下来
|
|
152
|
+
- 具体,不要模糊
|
|
153
|
+
|
|
154
|
+
2. **最小测试**
|
|
155
|
+
- 做最小可能的更改来测试假设
|
|
156
|
+
- 一次一个变量
|
|
157
|
+
- 不要一次修复多个问题
|
|
158
|
+
|
|
159
|
+
3. **继续前验证**
|
|
160
|
+
- 它工作了吗?是 → 阶段 4
|
|
161
|
+
- 没工作?形成新假设
|
|
162
|
+
- 不要在上面添加更多修复
|
|
163
|
+
|
|
164
|
+
4. **当你不知道时**
|
|
165
|
+
- 说"我不理解 X"
|
|
166
|
+
- 不要假装知道
|
|
167
|
+
- 寻求帮助
|
|
168
|
+
- 研究更多
|
|
169
|
+
|
|
170
|
+
### 阶段 4:实施
|
|
171
|
+
|
|
172
|
+
**修复根本原因,不是症状:**
|
|
173
|
+
|
|
174
|
+
1. **创建失败测试用例**
|
|
175
|
+
- 最简单的可能复现
|
|
176
|
+
- 尽可能自动测试
|
|
177
|
+
- 如果没有框架,使用一次性测试脚本
|
|
178
|
+
- 修复前必须有
|
|
179
|
+
- 使用 `superpowers:test-driven-development` 技能编写适当的失败测试
|
|
180
|
+
|
|
181
|
+
2. **实施单一修复**
|
|
182
|
+
- 解决已识别的根本原因
|
|
183
|
+
- 一次一个更改
|
|
184
|
+
- 没有"顺便"改进
|
|
185
|
+
- 没有捆绑重构
|
|
186
|
+
|
|
187
|
+
3. **验证修复**
|
|
188
|
+
- 测试现在通过了吗?
|
|
189
|
+
- 没有其他测试损坏?
|
|
190
|
+
- 问题实际解决了?
|
|
191
|
+
|
|
192
|
+
4. **如果修复不起作用**
|
|
193
|
+
- 停止
|
|
194
|
+
- 计数:你尝试了多少个修复?
|
|
195
|
+
- 如果 < 3:返回阶段 1,用新信息重新分析
|
|
196
|
+
- **如果 ≥ 3:停止并质疑架构(见下面的步骤 5)**
|
|
197
|
+
- 不要在没有架构讨论的情况下尝试修复 #4
|
|
198
|
+
|
|
199
|
+
5. **如果 3+ 修复失败:质疑架构**
|
|
200
|
+
|
|
201
|
+
**表明架构问题的模式:**
|
|
202
|
+
- 每个修复都揭示不同地方的新共享状态/耦合/问题
|
|
203
|
+
- 修复需要"大规模重构"来实现
|
|
204
|
+
- 每个修复都在其他地方创建新症状
|
|
205
|
+
|
|
206
|
+
**停止并质疑基础:**
|
|
207
|
+
- 这个模式从根本上是否健全?
|
|
208
|
+
- 我们是否"仅仅因为惯性而坚持它"?
|
|
209
|
+
- 我们应该重构架构还是继续修复症状?
|
|
210
|
+
|
|
211
|
+
**在尝试更多修复之前与你的人类伙伴讨论**
|
|
212
|
+
|
|
213
|
+
这不是失败的假设 - 这是错误的架构。
|
|
214
|
+
|
|
215
|
+
## 红旗 - 停止并遵循流程
|
|
216
|
+
|
|
217
|
+
如果你发现自己在想:
|
|
218
|
+
- "现在快速修复,以后调查"
|
|
219
|
+
- "只需尝试更改 X 看看是否有效"
|
|
220
|
+
- "添加多个更改,运行测试"
|
|
221
|
+
- "跳过测试,我会手动验证"
|
|
222
|
+
- "可能是 X,让我修复它"
|
|
223
|
+
- "我不完全理解,但这可能有效"
|
|
224
|
+
- "模式说 X 但我会以不同方式适应它"
|
|
225
|
+
- "这里是主要问题:[列出没有调查的修复]"
|
|
226
|
+
- 在跟踪数据流之前提出解决方案
|
|
227
|
+
- **"再尝试一次修复"(已经尝试了 2+)**
|
|
228
|
+
- **每个修复都揭示不同地方的新问题**
|
|
229
|
+
|
|
230
|
+
**所有这些都意味着:停止。返回阶段 1。**
|
|
231
|
+
|
|
232
|
+
**如果 3+ 修复失败:** 质疑架构(见阶段 4.5)
|
|
233
|
+
|
|
234
|
+
## 你的人类伙伴的信号你做错了
|
|
235
|
+
|
|
236
|
+
**注意这些重定向:**
|
|
237
|
+
- "那不是发生了吗?" - 你未经验证就假设
|
|
238
|
+
- "它会告诉我们...?" - 你应该添加证据收集
|
|
239
|
+
- "停止猜测" - 你在不理解的情况下提出修复
|
|
240
|
+
- "超级思考这个" - 质疑基础,而不仅仅是症状
|
|
241
|
+
- "我们卡住了?"(沮丧)- 你的方法不起作用
|
|
242
|
+
|
|
243
|
+
**当你看到这些:** 停止。返回阶段 1。
|
|
244
|
+
|
|
245
|
+
## 常见的合理化
|
|
246
|
+
|
|
247
|
+
| 借口 | 现实 |
|
|
248
|
+
|------|------|
|
|
249
|
+
| "问题简单,不需要流程" | 简单问题也有根本原因。流程对简单错误很快。 |
|
|
250
|
+
| "紧急情况,没时间流程" | 系统性调试比猜测和检查的混乱更快。 |
|
|
251
|
+
| "先试试这个,然后调查" | 第一个修复设定模式。从一开始就做对。 |
|
|
252
|
+
| "我会在确认修复有效后写测试" | 未经测试的修复不会持久。先测试证明它。 |
|
|
253
|
+
| "一次多个修复节省时间" | 无法隔离什么有效。导致新错误。 |
|
|
254
|
+
| "参考太长,我会适应模式" | 部分理解保证错误。完全阅读它。 |
|
|
255
|
+
| "我看到问题了,让我修复它" | 看到症状 ≠ 理解根本原因。 |
|
|
256
|
+
| "再尝试一次修复"(2+ 失败后) | 3+ 失败 = 架构问题。质疑模式,不要再修复。 |
|
|
257
|
+
|
|
258
|
+
## 快速参考
|
|
259
|
+
|
|
260
|
+
| 阶段 | 关键活动 | 成功标准 |
|
|
261
|
+
|------|----------|----------|
|
|
262
|
+
| **1. 根本原因** | 阅读错误,重现,检查更改,收集证据 | 理解 WHAT 和 WHY |
|
|
263
|
+
| **2. 模式** | 找到工作示例,比较 | 识别差异 |
|
|
264
|
+
| **3. 假设** | 形成理论,最小测试 | 确认或新假设 |
|
|
265
|
+
| **4. 实施** | 创建测试,修复,验证 | 错误解决,测试通过 |
|
|
266
|
+
|
|
267
|
+
## 当流程揭示"无根本原因"时
|
|
268
|
+
|
|
269
|
+
如果系统性调查揭示问题确实是环境性、时间依赖性或外部的:
|
|
270
|
+
|
|
271
|
+
1. 你已经完成了流程
|
|
272
|
+
2. 记录你调查了什么
|
|
273
|
+
3. 实施适当的处理(重试,超时,错误消息)
|
|
274
|
+
4. 添加监控/日志以便将来调查
|
|
275
|
+
|
|
276
|
+
**但:** 95% 的"无根本原因"案例是调查不完整。
|
|
277
|
+
|
|
278
|
+
## 支持技术
|
|
279
|
+
|
|
280
|
+
这些技术是系统性调试的一部分,在此目录中可用:
|
|
281
|
+
|
|
282
|
+
- **`root-cause-tracing.md`** - 通过调用堆栈向后跟踪错误以找到原始触发器
|
|
283
|
+
- **`defense-in-depth.md`** - 在找到根本原因后在多个层添加验证
|
|
284
|
+
- **`condition-based-waiting.md`** - 用条件轮询替换任意超时
|
|
285
|
+
|
|
286
|
+
**相关技能:**
|
|
287
|
+
- **superpowers:test-driven-development** - 用于创建失败测试用例(阶段 4,步骤 1)
|
|
288
|
+
- **superpowers:verification-before-completion** - 在声称成功之前验证修复有效
|
|
289
|
+
|
|
290
|
+
## 现实影响
|
|
291
|
+
|
|
292
|
+
来自调试会话:
|
|
293
|
+
- 系统方法:15-30 分钟修复
|
|
294
|
+
- 随机修复方法:2-3 小时混乱
|
|
295
|
+
- 首次修复率:95% 对 40%
|
|
296
|
+
- 引入的新错误:几乎为零对常见
|