ethan-skill 1.15.3 → 1.15.4

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 (46) hide show
  1. package/dist/agents/orchestrator.test.js +13 -12
  2. package/dist/agents/orchestrator.test.js.map +1 -1
  3. package/dist/agents/presets.d.ts.map +1 -1
  4. package/dist/agents/presets.js +57 -0
  5. package/dist/agents/presets.js.map +1 -1
  6. package/dist/skills/39-competitive-analysis.d.ts +3 -0
  7. package/dist/skills/39-competitive-analysis.d.ts.map +1 -0
  8. package/dist/skills/39-competitive-analysis.js +187 -0
  9. package/dist/skills/39-competitive-analysis.js.map +1 -0
  10. package/dist/skills/40-solution-proposal.d.ts +3 -0
  11. package/dist/skills/40-solution-proposal.d.ts.map +1 -0
  12. package/dist/skills/40-solution-proposal.js +196 -0
  13. package/dist/skills/40-solution-proposal.js.map +1 -0
  14. package/dist/skills/41-test-plan.d.ts +3 -0
  15. package/dist/skills/41-test-plan.d.ts.map +1 -0
  16. package/dist/skills/41-test-plan.js +255 -0
  17. package/dist/skills/41-test-plan.js.map +1 -0
  18. package/dist/skills/42-bug-report.d.ts +3 -0
  19. package/dist/skills/42-bug-report.d.ts.map +1 -0
  20. package/dist/skills/42-bug-report.js +224 -0
  21. package/dist/skills/42-bug-report.js.map +1 -0
  22. package/dist/skills/43-ops-runbook.d.ts +3 -0
  23. package/dist/skills/43-ops-runbook.d.ts.map +1 -0
  24. package/dist/skills/43-ops-runbook.js +282 -0
  25. package/dist/skills/43-ops-runbook.js.map +1 -0
  26. package/dist/skills/index.d.ts +5 -0
  27. package/dist/skills/index.d.ts.map +1 -1
  28. package/dist/skills/index.js +21 -1
  29. package/dist/skills/index.js.map +1 -1
  30. package/dist/skills/pipeline.d.ts.map +1 -1
  31. package/dist/skills/pipeline.js +46 -0
  32. package/dist/skills/pipeline.js.map +1 -1
  33. package/dist/skills/skills.test.js +3 -3
  34. package/dist/skills/skills.test.js.map +1 -1
  35. package/package.json +1 -1
  36. package/rules/claude-code/CLAUDE.md +1034 -3
  37. package/rules/cline/.clinerules +958 -2
  38. package/rules/codebuddy/CODEBUDDY.md +1008 -2
  39. package/rules/continue/.continuerules +958 -2
  40. package/rules/copilot/copilot-instructions.md +993 -2
  41. package/rules/cursor/.cursorrules +1028 -2
  42. package/rules/cursor/smart-flow.mdc +1028 -2
  43. package/rules/jetbrains/smart-flow.md +993 -2
  44. package/rules/lingma/smart-flow.md +1004 -3
  45. package/rules/windsurf/.windsurf/rules/smart-flow.md +994 -3
  46. package/rules/zed/smart-flow.rules +952 -1
@@ -0,0 +1,255 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testPlanSkill = void 0;
4
+ exports.testPlanSkill = {
5
+ id: 'test-plan',
6
+ name: '测试计划',
7
+ nameEn: 'test_plan',
8
+ order: 41,
9
+ category: '质量侧',
10
+ description: '制定全面的测试策略与计划,覆盖测试范围、用例设计、环境准备和质量门禁,确保产品质量可量化',
11
+ descriptionEn: 'Create comprehensive test strategy and plan covering scope, test case design, environment setup and quality gates',
12
+ detailDescription: `测试计划是质量保障的基石,明确"测什么、怎么测、谁来测、什么时候算通过"。
13
+ 本 Skill 帮助测试工程师(QA)和研发团队在迭代启动前制定结构化的测试策略:
14
+ 从测试范围界定到用例设计,从环境准备到质量门禁,让测试工作有据可依、有目标可量化。`,
15
+ triggers: [
16
+ '测试计划',
17
+ '测试策略',
18
+ 'test plan',
19
+ '测试方案',
20
+ '质量保障',
21
+ 'QA 计划',
22
+ '测试用例',
23
+ '测试设计',
24
+ '测试范围',
25
+ '@ethan 测试计划',
26
+ '@ethan test-plan',
27
+ '/test-plan',
28
+ ],
29
+ steps: [
30
+ {
31
+ title: '1. 测试范围与目标',
32
+ content: `明确本次迭代的测试边界:
33
+
34
+ **测试目标**
35
+ - 本版本要验证的核心功能/场景
36
+ - 回归范围:哪些已有功能可能受影响?
37
+ - 明确不测的内容(Out of Scope)及原因
38
+
39
+ **风险评估与测试重点**
40
+ \`\`\`
41
+ 高风险(必须全面测试):
42
+ - 新增功能 / 核心主流程变更
43
+ - 与外部系统集成点
44
+ - 数据迁移或 Schema 变更
45
+
46
+ 中风险(重点测试):
47
+ - 依赖被修改模块的功能
48
+ - 性能敏感路径
49
+
50
+ 低风险(冒烟测试即可):
51
+ - UI 样式微调
52
+ - 文案修改
53
+ - 配置项变更
54
+ \`\`\`
55
+
56
+ **测试类型矩阵**
57
+
58
+ | 测试类型 | 是否需要 | 负责人 | 工具 |
59
+ |---------|---------|--------|------|
60
+ | 单元测试 | ✅ | 开发 | Vitest/Jest |
61
+ | 接口测试 | ✅ | QA/开发 | Postman/Newman |
62
+ | 集成测试 | ✅ | QA | Playwright/Cypress |
63
+ | 性能测试 | 视需求 | QA | k6/JMeter |
64
+ | 安全测试 | 视需求 | 安全/QA | OWASP ZAP |
65
+ | 兼容性测试 | ✅ | QA | BrowserStack |`,
66
+ },
67
+ {
68
+ title: '2. 测试用例设计',
69
+ content: `系统化设计测试用例,覆盖正常流、异常流和边界条件:
70
+
71
+ **测试用例设计方法**
72
+
73
+ **等价类划分**
74
+ \`\`\`
75
+ 有效等价类(正常输入):
76
+ - 例:年龄字段 → 有效范围 [1, 150]
77
+
78
+ 无效等价类(异常输入):
79
+ - 例:年龄字段 → 负数、0、>150、非数字、空值
80
+ \`\`\`
81
+
82
+ **边界值分析**
83
+ \`\`\`
84
+ 对于范围 [min, max],测试:min-1, min, min+1, max-1, max, max+1
85
+ \`\`\`
86
+
87
+ **测试用例模板**
88
+
89
+ | TC编号 | 模块 | 用例标题 | 前置条件 | 测试步骤 | 预期结果 | 优先级 |
90
+ |--------|------|---------|---------|---------|---------|--------|
91
+ | TC-001 | 登录 | 正确账密登录成功 | 账号已注册 | 1.输入账密 2.点击登录 | 跳转首页 | P0 |
92
+ | TC-002 | 登录 | 错误密码提示友好 | 账号已注册 | 1.输入错误密码 2.点击登录 | 显示"密码错误" | P1 |
93
+
94
+ **测试优先级定义**
95
+ - **P0**:核心主流程,必须在版本发布前全部通过
96
+ - **P1**:重要功能,应在发布前通过
97
+ - **P2**:次要功能,可在下次迭代修复
98
+ - **P3**:体验优化,记录但不阻塞发布
99
+
100
+ **探索性测试 Charter**
101
+ 除结构化用例外,为高风险模块安排探索测试:
102
+ \`\`\`
103
+ 探索目标:[模块名称]
104
+ 时间盒:X 小时
105
+ 关注点:[并发操作、网络异常、异常数据输入等]
106
+ 记录方式:截图 + 操作日志
107
+ \`\`\``,
108
+ },
109
+ {
110
+ title: '3. 测试环境与数据准备',
111
+ content: `确保测试环境稳定、测试数据充分:
112
+
113
+ **环境规划**
114
+
115
+ | 环境 | 用途 | 部署方式 | 数据说明 |
116
+ |------|------|---------|---------|
117
+ | Dev | 开发自测 | 本地 | 模拟数据 |
118
+ | Staging | QA 测试 | 自动部署 | 脱敏生产数据 |
119
+ | PreProd | UAT验收 | 手动触发 | 接近真实数据 |
120
+ | Production | 生产监控 | 审批发布 | 真实数据 |
121
+
122
+ **测试数据策略**
123
+ \`\`\`
124
+ 数据分类:
125
+ - 正常数据:覆盖典型使用场景
126
+ - 边界数据:最大值、最小值、空值
127
+ - 异常数据:非法格式、SQL注入、XSS尝试
128
+ - 历史存量数据:模拟真实用户场景
129
+
130
+ 数据准备方法:
131
+ - 自动生成:Faker.js / 工厂函数
132
+ - 快照恢复:测试开始前恢复数据库快照
133
+ - 独立隔离:每个测试用例使用独立数据集,避免互相污染
134
+ \`\`\`
135
+
136
+ **环境就绪检查**
137
+ - [ ] 所有依赖服务(数据库、消息队列、第三方API)可用
138
+ - [ ] 测试账号已创建(覆盖不同角色权限)
139
+ - [ ] 监控和日志收集已开启
140
+ - [ ] 被测版本已正确部署并通过冒烟测试`,
141
+ },
142
+ {
143
+ title: '4. 自动化测试策略',
144
+ content: `规划自动化覆盖,实现质量门禁:
145
+
146
+ **自动化优先级选择**
147
+ \`\`\`
148
+ 优先自动化的场景:
149
+ ✅ 回归测试(高频执行)
150
+ ✅ 核心主流程(P0 用例)
151
+ ✅ 接口测试(快速、稳定)
152
+ ✅ 数据驱动场景(大量参数组合)
153
+
154
+ 暂不自动化的场景:
155
+ ❌ 探索性测试(需人工判断)
156
+ ❌ 一次性场景(成本高于收益)
157
+ ❌ UI 频繁变更的页面(维护成本高)
158
+ \`\`\`
159
+
160
+ **自动化框架选型**
161
+
162
+ | 类型 | 框架 | 适用场景 |
163
+ |------|------|---------|
164
+ | 单元测试 | Vitest / Jest | 函数/组件逻辑 |
165
+ | API 测试 | Supertest / Postman | 接口验证 |
166
+ | E2E 测试 | Playwright | 全链路主流程 |
167
+ | 性能测试 | k6 | 压力/负载测试 |
168
+
169
+ **CI 集成配置**
170
+ \`\`\`yaml
171
+ # 每次 PR 必须通过:
172
+ - 单元测试(覆盖率 ≥ 80%)
173
+ - API 接口测试(P0 用例全通过)
174
+
175
+ # 每日定时(凌晨 2:00):
176
+ - 全量回归(含 P1 用例)
177
+ - 性能基准测试(响应时间对比)
178
+ \`\`\`
179
+
180
+ **质量门禁(Quality Gate)**
181
+
182
+ | 指标 | 通过标准 | 失败处理 |
183
+ |------|---------|---------|
184
+ | 单测覆盖率 | ≥ 80% | 阻塞合并 |
185
+ | P0 用例通过率 | 100% | 阻塞发布 |
186
+ | P1 用例通过率 | ≥ 95% | 需评审 |
187
+ | Critical/High Bug | 0 | 阻塞发布 |
188
+ | 性能劣化 | P99 < 基线 120% | 需评审 |`,
189
+ },
190
+ {
191
+ title: '5. 缺陷管理与发布标准',
192
+ content: `建立清晰的缺陷处理流程和发布质量标准:
193
+
194
+ **缺陷严重级别定义**
195
+ \`\`\`
196
+ P0 - Critical(阻塞级):
197
+ 系统崩溃、核心功能不可用、数据丢失/安全漏洞
198
+ → 立即修复,不发布
199
+
200
+ P1 - High(严重):
201
+ 核心功能受损,有临时绕过方法
202
+ → 本版本修复
203
+
204
+ P2 - Medium(一般):
205
+ 功能部分异常,不影响主流程
206
+ → 可延期至下版本
207
+
208
+ P3 - Low(轻微):
209
+ 体验问题、文案错误、UI 细节
210
+ → 排期修复,不阻塞发布
211
+ \`\`\`
212
+
213
+ **缺陷生命周期**
214
+ \`\`\`
215
+ New → 开发确认 → In Progress → Fixed → 测试验证
216
+ ↓(无法复现/不修复)→ Closed / Won't Fix
217
+ \`\`\`
218
+
219
+ **发布质量标准(Release Criteria)**
220
+ - ✅ 所有 P0 Bug 已修复并验证
221
+ - ✅ P1 Bug 修复率 ≥ 95%,剩余已评估风险
222
+ - ✅ P0/P1 测试用例通过率 100%
223
+ - ✅ 性能指标未出现显著劣化(对比基线)
224
+ - ✅ 安全扫描无 Critical/High 漏洞
225
+ - ✅ 主要浏览器/设备兼容性验证通过
226
+
227
+ **测试报告模板**
228
+ \`\`\`markdown
229
+ ## 测试总结报告
230
+
231
+ ### 执行概况
232
+ - 测试周期:[开始] ~ [结束]
233
+ - 执行用例数:N(P0: x, P1: y, P2: z)
234
+ - 通过率:X%
235
+ - 发现缺陷:N(P0:x, P1:y, P2:z, P3:w)
236
+ - 已修复:N / 待修复:N
237
+
238
+ ### 风险说明
239
+ [遗留问题及上线风险评估]
240
+
241
+ ### 质量结论
242
+ ✅ 建议发布 / ⚠️ 有条件发布 / ❌ 不建议发布
243
+ \`\`\``,
244
+ },
245
+ ],
246
+ outputFormat: 'Markdown 测试计划文档:测试范围 + 用例设计矩阵 + 环境准备清单 + 自动化策略 + 发布质量标准',
247
+ notes: [
248
+ '测试计划应在需求评审阶段启动,与开发并行而非串行',
249
+ 'P0 测试用例必须自动化,保证每次发布快速回归',
250
+ '测试数据要独立隔离,避免用例间互相污染',
251
+ '发布标准要提前与产品/研发对齐,避免上线当天扯皮',
252
+ ],
253
+ nextSkill: 'bug-report',
254
+ };
255
+ //# sourceMappingURL=41-test-plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"41-test-plan.js","sourceRoot":"","sources":["../../src/skills/41-test-plan.ts"],"names":[],"mappings":";;;AAEa,QAAA,aAAa,GAAoB;IAC5C,EAAE,EAAE,WAAW;IACf,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,WAAW;IACnB,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,8CAA8C;IAC3D,aAAa,EAAE,mHAAmH;IAClI,iBAAiB,EAAE;;0CAEqB;IACxC,QAAQ,EAAE;QACR,MAAM;QACN,MAAM;QACN,WAAW;QACX,MAAM;QACN,MAAM;QACN,OAAO;QACP,MAAM;QACN,MAAM;QACN,MAAM;QACN,aAAa;QACb,kBAAkB;QAClB,YAAY;KACb;IACD,KAAK,EAAE;QACL;YACE,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCAiCmB;SAC7B;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAsCR;SACF;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uBA6BQ;SAClB;QACD;YACE,KAAK,EAAE,YAAY;YACnB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;+BA4CgB;SAC1B;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDR;SACF;KACF;IACD,YAAY,EAAE,yDAAyD;IACvE,KAAK,EAAE;QACL,0BAA0B;QAC1B,yBAAyB;QACzB,qBAAqB;QACrB,0BAA0B;KAC3B;IACD,SAAS,EAAE,YAAY;CACxB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SkillDefinition } from './types';
2
+ export declare const bugReportSkill: SkillDefinition;
3
+ //# sourceMappingURL=42-bug-report.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"42-bug-report.d.ts","sourceRoot":"","sources":["../../src/skills/42-bug-report.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,cAAc,EAAE,eA2N5B,CAAC"}
@@ -0,0 +1,224 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.bugReportSkill = void 0;
4
+ exports.bugReportSkill = {
5
+ id: 'bug-report',
6
+ name: '缺陷管理',
7
+ nameEn: 'bug_report',
8
+ order: 42,
9
+ category: '质量侧',
10
+ description: '规范缺陷报告撰写、优先级评估、根因追踪和统计分析,建立团队缺陷管理闭环',
11
+ descriptionEn: 'Standardize bug report writing, priority assessment, root cause tracking and statistics to establish a closed-loop defect management process',
12
+ detailDescription: `缺陷管理不只是"提 Bug",更是产品质量改进的数据来源。
13
+ 本 Skill 帮助 QA 工程师撰写高质量的缺陷报告,建立清晰的优先级体系,
14
+ 通过缺陷根因分析驱动流程改进,让每一个 Bug 都成为产品变得更好的契机。`,
15
+ triggers: [
16
+ '缺陷管理',
17
+ '缺陷报告',
18
+ 'bug report',
19
+ '提 bug',
20
+ 'bug 管理',
21
+ '缺陷追踪',
22
+ 'defect management',
23
+ '问题报告',
24
+ '测试报告',
25
+ '@ethan bug',
26
+ '@ethan bug-report',
27
+ '/bug-report',
28
+ ],
29
+ steps: [
30
+ {
31
+ title: '1. 高质量缺陷报告撰写',
32
+ content: `一份好的 Bug Report 让开发无需追问就能复现和修复:
33
+
34
+ **缺陷报告必填字段**
35
+
36
+ \`\`\`markdown
37
+ ## Bug Report: [简洁描述,动词+对象+现象]
38
+
39
+ **严重级别**: P0/P1/P2/P3
40
+ **优先级**: 高/中/低
41
+ **发现版本**: v1.x.x
42
+ **环境**: [浏览器/OS/设备型号]
43
+ **发现日期**: YYYY-MM-DD
44
+ **报告人**: @名字
45
+
46
+ ### 问题描述
47
+ [一句话描述:在[场景]下,执行[操作],出现[异常现象]]
48
+
49
+ ### 复现步骤
50
+ 1. 前置条件:[账号状态、数据准备、环境配置]
51
+ 2. 操作步骤(精确、可重复):
52
+ - Step 1: 进入 [页面/模块]
53
+ - Step 2: 执行 [具体操作]
54
+ - Step 3: 观察 [现象]
55
+ 3. 实际结果:[发生了什么]
56
+ 4. 预期结果:[应该发生什么,依据:需求文档/设计稿]
57
+
58
+ ### 复现率
59
+ □ 必现(100%) □ 偶现(约 X%) □ 难以复现
60
+
61
+ ### 证据
62
+ - 截图/录屏:[附件]
63
+ - 错误日志:[关键堆栈信息]
64
+ - 网络请求:[接口返回的异常数据]
65
+ \`\`\`
66
+
67
+ **好 vs 坏 Bug Report 对比**
68
+
69
+ | 差的写法 | 好的写法 |
70
+ |---------|---------|
71
+ | "登录有问题" | "输入正确密码后点击登录,接口返回 500 但页面无错误提示(必现)" |
72
+ | "页面显示错误" | "商品列表第2页价格显示 0.00,实际应为正确价格(Safari 15 + macOS)" |`,
73
+ },
74
+ {
75
+ title: '2. 缺陷优先级与严重级别评估',
76
+ content: `优先级评估直接影响研发排期,必须准确:
77
+
78
+ **严重级别(Severity)— 描述影响范围**
79
+
80
+ | 级别 | 定义 | 典型案例 |
81
+ |------|------|---------|
82
+ | **P0 Critical** | 系统崩溃 / 数据丢失 / 安全漏洞 / 核心功能完全不可用 | 支付失败但订单已创建、SQL注入 |
83
+ | **P1 High** | 核心功能受损,无临时解决方案 | 购物车无法添加商品 |
84
+ | **P2 Medium** | 功能部分异常,有绕过方法 | 导出 Excel 某列乱码,可手动复制 |
85
+ | **P3 Low** | 体验问题、UI 细节、文案 | 按钮颜色不符合设计稿 |
86
+
87
+ **优先级(Priority)— 决定修复时间**
88
+
89
+ | 优先级 | 修复时间 | 说明 |
90
+ |--------|---------|------|
91
+ | 高 | 当天/1个工作日 | 影响版本发布或大量用户 |
92
+ | 中 | 本迭代内 | 影响功能但不阻塞发布 |
93
+ | 低 | 下个迭代 | 体验优化,排入 Backlog |
94
+
95
+ **严重级别 ≠ 优先级**(重要)
96
+ \`\`\`
97
+ 案例:登录页 Logo 错位(P3 Severity)
98
+ → 但明天是品牌发布会 → Priority = 高
99
+
100
+ 案例:隐藏页面数据精度问题(P2 Severity)
101
+ → 用户无感知,下个迭代处理 → Priority = 低
102
+ \`\`\``,
103
+ },
104
+ {
105
+ title: '3. 缺陷生命周期管理',
106
+ content: `规范缺陷流转,确保每个 Bug 都有人负责、有结果:
107
+
108
+ **缺陷状态流转**
109
+ \`\`\`
110
+ [New] → 分配给开发确认
111
+ ↓ ↓
112
+ [Confirmed] [Rejected/Won't Fix](说明原因)
113
+
114
+ [In Progress] → 开发修复中
115
+
116
+ [Fixed/待验证] → QA 回归验证
117
+ ↓ ↓
118
+ [Closed] [Reopen](验证不通过)
119
+ \`\`\`
120
+
121
+ **关闭条件明确化**
122
+ \`\`\`
123
+ ✅ 正常关闭(Closed):
124
+ - 修复已验证通过
125
+ - 标注修复版本号
126
+
127
+ ⚠️ Won't Fix(不修复):
128
+ - 说明原因:设计如此/无法复现/成本>收益
129
+ - 需 PM 或技术负责人确认
130
+
131
+ 🔄 延期(Deferred):
132
+ - 说明延期原因和目标版本
133
+ - 不能无限期延期
134
+ \`\`\`
135
+
136
+ **回归测试要点**
137
+ \`\`\`
138
+ 验证修复时,除验证原场景外还需检查:
139
+ 1. 相关功能是否引入新问题(Side Effect)
140
+ 2. 历史类似 Bug 是否也已修复(举一反三)
141
+ 3. 修复方案是否符合原始需求(不能"曲线救国")
142
+ \`\`\``,
143
+ },
144
+ {
145
+ title: '4. 缺陷根因分析',
146
+ content: `从每个 Bug 中学习,驱动质量改进:
147
+
148
+ **根因分类体系(参考 Orthogonal Defect Classification)**
149
+
150
+ | 根因类别 | 说明 | 预防措施 |
151
+ |---------|------|---------|
152
+ | 需求理解偏差 | 开发理解与产品意图不一致 | 需求评审 + AC 验收标准 |
153
+ | 逻辑缺陷 | 算法/条件判断错误 | 单元测试覆盖分支 |
154
+ | 边界未处理 | Null/空/越界/特殊字符 | 测试用例覆盖边界值 |
155
+ | 接口契约不一致 | 前后端字段/格式约定不一致 | API 文档 + 接口自动化测试 |
156
+ | 并发/竞态 | 多用户操作时出现数据异常 | 并发测试 + 事务设计 |
157
+ | 环境/配置差异 | 测试环境通过,生产环境报错 | 配置即代码 + 环境等价性 |
158
+ | 数据问题 | 存量数据格式与新逻辑不兼容 | 数据迁移脚本 + 兼容性设计 |
159
+
160
+ **5 Why 根因追溯(针对 P0/P1 Bug)**
161
+ \`\`\`
162
+ Bug:用户余额扣减后订单状态仍为"待支付"
163
+
164
+ Why 1: 为什么订单状态没更新?→ 更新订单状态的事务回滚了
165
+ Why 2: 为什么回滚了?→ 库存扣减接口超时导致事务失败
166
+ Why 3: 为什么超时?→ 库存服务在高并发时响应慢
167
+ Why 4: 为什么没有降级处理?→ 缺少超时熔断配置
168
+ Why 5: 为什么缺少?→ 技术方案设计时未考虑外部依赖超时场景
169
+
170
+ 根因:技术方案评审缺少分布式事务和超时处理checklist
171
+ \`\`\``,
172
+ },
173
+ {
174
+ title: '5. 缺陷统计与质量分析',
175
+ content: `用数据驱动质量持续改进:
176
+
177
+ **核心缺陷指标**
178
+
179
+ | 指标 | 计算方式 | 参考目标 |
180
+ |------|---------|---------|
181
+ | 缺陷发现率 | 发现缺陷数 / 测试用例数 | 低于 5% 说明系统质量良好 |
182
+ | 缺陷修复率 | 已修复 / 总发现 × 100% | 发布前 P0/P1 ≥ 100% |
183
+ | 缺陷逃逸率 | 生产 Bug / (测试Bug + 生产Bug) | 目标 < 5% |
184
+ | 平均修复时间 | 修复耗时均值(按P级统计) | P0 < 4h, P1 < 24h |
185
+ | 缺陷重开率 | Reopen 次数 / Close 次数 | 目标 < 10%(说明修复质量) |
186
+
187
+ **缺陷分布分析**
188
+ \`\`\`
189
+ 维度1:按模块分布 → 识别质量热点,重点加强测试
190
+ 维度2:按根因分布 → 识别系统性问题,改进研发流程
191
+ 维度3:按发现阶段 → 越早发现成本越低,推动向左移测试
192
+ 开发自测 < 代码审查 < 测试阶段 < 上线后
193
+ \`\`\`
194
+
195
+ **周期性质量报告模板**
196
+ \`\`\`markdown
197
+ ## 缺陷分析报告 — v[版本] [时间范围]
198
+
199
+ ### 本期概况
200
+ - 总发现: N 个(P0:x, P1:y, P2:z, P3:w)
201
+ - 已关闭: N 个 | 遗留: N 个
202
+ - 逃逸到生产: N 个(逃逸率: X%)
203
+
204
+ ### 质量热点
205
+ 高频缺陷模块 TOP3:
206
+ 1. [模块] — N 个缺陷 — 根因:[分类]
207
+ 2. ...
208
+
209
+ ### 改进行动
210
+ - [针对高频根因的具体改进措施]
211
+ - 负责人 & 完成时间
212
+ \`\`\``,
213
+ },
214
+ ],
215
+ outputFormat: 'Markdown 缺陷报告 + 优先级评估 + 根因分析(5 Why)+ 质量数据报告',
216
+ notes: [
217
+ 'Bug Report 要让开发"无需追问就能复现",复现步骤必须精确',
218
+ 'P0 Bug 必须有根因分析,推动流程改进而不只是修复表象',
219
+ '缺陷逃逸率是测试质量的核心指标,每次生产问题都要回溯',
220
+ '缺陷统计数据要定期分享给全团队,共同推动质量文化建设',
221
+ ],
222
+ nextSkill: 'unit-testing',
223
+ };
224
+ //# sourceMappingURL=42-bug-report.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"42-bug-report.js","sourceRoot":"","sources":["../../src/skills/42-bug-report.ts"],"names":[],"mappings":";;;AAEa,QAAA,cAAc,GAAoB;IAC7C,EAAE,EAAE,YAAY;IAChB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,EAAE;IACT,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,qCAAqC;IAClD,aAAa,EAAE,8IAA8I;IAC7J,iBAAiB,EAAE;;sCAEiB;IACpC,QAAQ,EAAE;QACR,MAAM;QACN,MAAM;QACN,YAAY;QACZ,OAAO;QACP,QAAQ;QACR,MAAM;QACN,mBAAmB;QACnB,MAAM;QACN,MAAM;QACN,YAAY;QACZ,mBAAmB;QACnB,aAAa;KACd;IACD,KAAK,EAAE;QACL;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8DAwC+C;SACzD;QACD;YACE,KAAK,EAAE,iBAAiB;YACxB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BR;SACF;QACD;YACE,KAAK,EAAE,aAAa;YACpB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAoCR;SACF;QACD;YACE,KAAK,EAAE,WAAW;YAClB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;OAyBR;SACF;QACD;YACE,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAqCR;SACF;KACF;IACD,YAAY,EAAE,6CAA6C;IAC3D,KAAK,EAAE;QACL,oCAAoC;QACpC,+BAA+B;QAC/B,4BAA4B;QAC5B,4BAA4B;KAC7B;IACD,SAAS,EAAE,cAAc;CAC1B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { SkillDefinition } from './types';
2
+ export declare const opsRunbookSkill: SkillDefinition;
3
+ //# sourceMappingURL=43-ops-runbook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"43-ops-runbook.d.ts","sourceRoot":"","sources":["../../src/skills/43-ops-runbook.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE/C,eAAO,MAAM,eAAe,EAAE,eAqR7B,CAAC"}