kld-sdd 2.4.14 → 2.4.15

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.
@@ -1,526 +0,0 @@
1
- ---
2
- name: OPSX: Spec
3
- description: "创建技术契约文档 - 为每个能力定义业务场景与技术规范"
4
- argument-hint: "[change-name] [上下文文件...]"
5
- ---
6
-
7
- 创建 **specs/<capability>/spec.md** - 业务场景与技术契约文档(代码生成的唯一真理,聚焦 What)。
8
-
9
- > **🖥️ 跨平台执行规则**
10
- > - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
11
- > - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
12
- > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
13
- > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
14
- > **📊 Telemetry(必做,不得跳过)**
15
- > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
16
-
17
- > **⚠️ 阶段边界提示**
18
- >
19
- > 当前处于 **Spec(契约)阶段**,此阶段:
20
- > - ✅ **允许**:创建/编辑 spec.md 文档、读取代码/文档作为上下文分析
21
- > - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
22
- > - ⛔ **单阶段原则**:完成 spec.md 后**必须立即停止**,等待用户主动触发下一阶段
23
- >
24
- > 即使用户提供了代码作为上下文,也只用于分析现有实现,**不执行任何代码操作**。
25
- > 代码实现将在 `/opsx:apply` 阶段进行。
26
- > **完成本阶段后,绝对禁止自动继续执行 design/task 等后续阶段。**
27
-
28
- **【文件结构】**:每个 capability 生成一个独立的 spec 文件:
29
- ```
30
- openspec/changes/<name>/
31
- ├── proposal.md
32
- ├── specs/
33
- │ ├── user-auth/
34
- │ │ └── spec.md # capability 1 的规格
35
- │ ├── data-export/
36
- │ │ └── spec.md # capability 2 的规格
37
- │ └── ...
38
- ├── design.md
39
- └── tasks.md
40
- ```
41
-
42
- ---
43
-
44
- **前置要求**: 已运行 `/opsx:propose` 且 proposal.md 中已定义能力列表
45
-
46
- **执行步骤**
47
-
48
- 0. **【Telemetry 必做】记录阶段开始**
49
-
50
- 在终端执行(若命令失败必须中止本阶段,不得跳过):
51
- ```bash
52
- node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
53
- ```
54
- 保存输出 JSON 中的 `event_id`,供阶段结束使用。
55
-
56
- 1. **【交互引导】确认变更名称**
57
-
58
- 若未提供,列出当前所有变更供用户选择:
59
- ```bash
60
- openspec list
61
- ```
62
- 若变更不存在,引导用户先运行 `/opsx:propose <name>`。
63
-
64
- **【变更选择交互】**:
65
- > "请选择要创建 specs 的变更:
66
- > 1. [变更1名称] - [变更描述]
67
- > 2. [变更2名称] - [变更描述]
68
- > ..."
69
-
70
- 若只有一个变更,直接确认:"是否继续变更 `[name]`?(y/n)"
71
-
72
- 2. **【关键步骤】读取 proposal.md 并提取 Capabilities**
73
-
74
- 读取 `openspec/changes/<name>/proposal.md`,**重点提取 Capabilities 章节**:
75
-
76
- ```markdown
77
- ## 3. 能力分解
78
-
79
- ### 3.1 新增能力
80
- - `user-auth`: 用户认证能力
81
- - `data-export`: 数据导出能力
82
-
83
- ### 3.2 修改能力
84
- - `existing-feature`: 修改某需求
85
- ```
86
-
87
- **解析规则**:
88
- - 新增能力:创建 `specs/<capability-name>/spec.md`
89
- - 修改能力:创建 `specs/<existing-name>/spec.md`(增量规格)
90
-
91
- **【上下文完整性检查】**:
92
- - [ ] proposal.md 是否存在?
93
- - [ ] 能力分解章节是否存在?
94
- - [ ] 是否列出了至少一个 capability?
95
-
96
- **【发现上下文不足时】**:
97
- > "proposal.md 中未定义能力列表,请选择:
98
- > - A. 先运行 `/opsx:propose` 补充能力分解章节
99
- - B. 在此处定义需要创建的能力
100
- > - C. 取消操作"
101
-
102
- 3. **【上下文加载】识别并读取用户提供的文件**
103
-
104
- **自动识别上下文文件**:
105
- 若用户在命令中指定了文件路径(如 `/opsx:spec atp-calc ./算法逻辑.md ./testcase/`),
106
- 或在对话中附加/引用了文件,**必须自动读取这些文件**。
107
-
108
- **文件识别规则**:
109
- - 以 `.md`、`.txt`、`.java`、`.ts`、`.xml`、`.json` 等扩展名结尾 → 识别为文件路径
110
- - 以 `/` 或 `./` 开头 → 识别为路径
111
- - 目录路径 → 递归读取目录下的文件
112
-
113
- **上下文类型与用途**:
114
- | 文件类型 | 用途 | 用法 |
115
- |---------|------|------|
116
- | 需求文档 (.md) | 提取业务规则、算法逻辑 | 生成 Requirement |
117
- | 代码文件 (.java/.ts) | 理解现有实现 | 提取接口定义 |
118
- | 测试文件 (*Test.java) | 提取测试场景 | 生成 Scenario |
119
- | 测试数据 (.xml/.json) | 理解边界条件 | 补充 Scenario 边界 |
120
-
121
- **示例**:
122
- ```
123
- /opsx:spec atp-calc ./ATP引擎算法逻辑.md
124
- /opsx:spec atp-calc ./erp-algorithm-atp/src/ ./testcase/ATP1.xml
125
- ```
126
-
127
- 4. **【交互引导】上下文补充提示**
128
-
129
- **若用户未提供任何上下文文件**,AI 分析 proposal.md 后,**主动提示用户补充**:
130
-
131
- **【关键】具体化建议**:
132
- AI 必须**引用 proposal.md 中的具体内容**给出建议:
133
- ```
134
- ❌ 错误:"建议提供测试用例"
135
- ✅ 正确:"proposal.md 提到了《ATP计算》,建议提供 ATP 算法逻辑文档或测试用例"
136
- ```
137
-
138
- **主动提示模板**:
139
- > "📌 **建议提供更丰富的上下文信息**:
140
- >
141
- > proposal.md 中提到:
142
- > - **《[XX算法/功能]》** - 建议提供详细算法说明文档
143
- > - **《[XX测试场景]》** - 建议提供测试用例或测试数据
144
- >
145
- > 您可以:
146
- > - **在命令后追加文件路径**:`/opsx:spec atp-calc ./算法.md ./testcase/`
147
- > - **在对话中上传文件**或粘贴内容
148
- > - **告诉我文件位置**,我会自动读取
149
- >
150
- > 或者选择:
151
- > - A. 基于现有信息继续(Scenario 可能不完整)
152
- > - B. 已提供全部信息"
153
-
154
- 5. **【关键步骤】读取本地模板文件**
155
-
156
- **必须先读取** `openspec-templates/spec.md` 作为文档结构模板:
157
- ```
158
- 使用 Read 工具读取:openspec-templates/spec.md
159
- ```
160
-
161
- 此模板用于每个 capability 的 spec.md 文件,定义了:
162
- - 需求项格式(`### 需求项:<name>`)
163
- - 场景格式(`#### 场景:<name>` + 当/预期)
164
- - 变更操作(新增/修改/移除)
165
-
166
- **【重要】不得使用 `openspec instructions` 返回的简化 template,必须以 `openspec-templates/spec.md` 为准。**
167
-
168
- 6. **获取项目上下文(可选)**
169
- ```bash
170
- openspec instructions specs --change "<name>" --json
171
- ```
172
- 解析返回的 JSON,仅获取:
173
- - `context`:项目背景约束(**仅供你参考,不要写入文档**)
174
- - `rules`:文档编写规则(**仅供你参考,不要写入文档**)
175
- - `outputPath`:文档输出路径(`specs/**/*.md`)
176
-
177
- **注意**:忽略返回的 `template` 字段,使用步骤 3 读取的本地模板。
178
-
179
- 7. **【交互引导】确认要创建的 specs 列表**
180
-
181
- 向用户展示即将创建的 spec 文件:
182
- > "根据 proposal.md 中的 Capabilities,将创建以下 spec 文件:
183
- > - specs/user-auth/spec.md(新增)
184
- > - specs/data-export/spec.md(新增)
185
- > - specs/existing-feature/spec.md(修改)
186
- >
187
- > 请确认:
188
- > - A. 确认列表,开始创建
189
- > - B. 跻加更多 capabilities
190
- > - C. 跳过某些 capabilities"
191
-
192
- 8. **【AI 分析澄清】识别模糊点**
193
-
194
- 对每个 capability,分析是否有需要澄清的技术点:
195
-
196
- **常见需要澄清的场景**:
197
- - 业务规则存在多种技术实现可能
198
- - 性能要求未量化("高性能"→具体 QPS/RT)
199
- - 安全要求不明确("安全"→具体认证/加密方式)
200
- - 边界场景未覆盖
201
- - **技术选型缺少版本信息**(框架、库、中间件等)
202
-
203
- **【主动询问机制】**:
204
- > "capability '原文' 存在多种技术实现可能:
205
- > - 方案A:[技术方案A]
206
- > - 方案B:[技术方案B]
207
- > 请确认采用哪种方案,或提供更多信息:"
208
-
209
- **【技术选型版本引导】**:
210
- 当发现技术选型(框架、库、中间件、数据库等)未指定版本时,主动询问:
211
- > "检测到以下技术选型未指定版本:
212
- > | 技术组件 | 当前描述 | 需要补充 |
213
- > |---------|---------|---------|
214
- > | Redis | 仅提及使用 | 版本号(如 7.x) |
215
- > | Spring Boot | 仅提及使用 | 版本号(如 3.2.x) |
216
- > | MySQL | 仅提及使用 | 版本号(如 8.0) |
217
- >
218
- > 版本信息对后续开发至关重要,请补充:
219
- > - A. 逐个指定版本
220
- > - B. 使用项目当前已有版本(若有)
221
- > - C. 使用最新稳定版(将自动查询)"
222
-
223
- 9. **【循环】为每个 capability 创建 spec.md**
224
-
225
- **以 `openspec-templates/spec.md` 的结构为骨架**,为每个 capability 创建独立的 spec 文件:
226
-
227
- **【输出路径】**:`specs/<capability-name>/spec.md`
228
-
229
- **【质量红线】生成文档必须使用完整模板结构:**
230
-
231
- ```markdown
232
- # spec.md - 能力规格定义
233
-
234
- > **定位**:单个能力(capability)的技术规格定义
235
- > **【质量红线】严禁描述模糊;约束必须量化
236
- > **【格式要求】** 需求项使用 `####`(4个#),场景必须使用 `#####`(5个#)
237
-
238
- ---
239
-
240
- ## 1. 需求规格
241
-
242
- ### 新增需求
243
-
244
- #### 需求项:<!-- 需求名称 -->
245
- 系统必须 ...
246
-
247
- ##### 场景:<!-- 场景名称 -->
248
- - **当** <!-- 触发条件 -->
249
- - **预期** <!-- 预期结果 -->
250
-
251
- ### 修改需求
252
- <!-- 仅当修改已有需求时使用,必须复制完整原需求内容再修改 -->
253
-
254
- #### 需求项:<!-- 已有需求名称 -->
255
- 系统必须 ...
256
-
257
- ### 移除需求
258
- <!-- 仅当移除已有需求时使用 -->
259
-
260
- #### 需求项:<!-- 被移除的需求名称 -->
261
- **移除原因**:<!-- 移除原因 -->
262
- **迁移方案**:<!-- 迁移方案 -->
263
-
264
- ---
265
-
266
- ## 2. 技术契约(SDD 扩展)
267
-
268
- <!-- 具体的技术实现契约,代码生成的“唯一真理” -->
269
-
270
- ### 2.1 接口定义
271
- #### 接口基本信息
272
- - **路径**:`/api/v1/xxx`
273
- - **方法**:GET/POST/PUT/DELETE
274
- - **内容类型**:application/json
275
-
276
- #### 请求参数
277
- | 参数名 | 类型 | 必填 | 说明 | 示例值 | 约束条件 |
278
- |-------|------|------|------|--------|----------|
279
- | | | | | | |
280
-
281
- #### 响应结构
282
- ```json
283
- { "code": 0, "message": "success", "data": {} }
284
- ```
285
-
286
- #### 错误码定义
287
- | 错误码 | 含义 | 触发条件 |
288
- |-------|------|----------|
289
- | | | |
290
-
291
- ---
292
-
293
- ## 3. 物理约束
294
-
295
- <!-- 【质量红线】所有约束必须量化 -->
296
-
297
- ### 3.1 性能约束
298
- | 指标 | 约束值 | 说明 |
299
- |------|-------|------|
300
- | 响应时间 | < X 毫秒 (P99) | |
301
- | 吞吐量 | > X QPS | |
302
- | 并发数 | 最大 X | |
303
-
304
- ### 3.2 资源约束
305
- | 资源 | 限制 | 说明 |
306
- |------|------|------|
307
- | 内存 | < X MB | |
308
- | CPU | < X% | |
309
- | 存储 | < X GB | |
310
-
311
- ### 3.3 超时配置
312
- - 连接超时:X 毫秒
313
- - 读取超时:X 毫秒
314
- - 总超时:X 毫秒
315
-
316
- ---
317
-
318
- ## 4. 影响模块
319
-
320
- ### 4.1 内部依赖
321
- - [ ] 服务A:调用方式、用途
322
-
323
- ### 4.2 外部依赖
324
- <!-- 【质量红线】技术选型必须包含版本信息 -->
325
- | 组件类型 | 组件名称 | 版本 | 用途 | 降级策略 |
326
- |---------|---------|------|------|--------|
327
- | 框架 | | | | |
328
- | 数据库 | | | | |
329
- | 缓存 | | | | |
330
- | 消息队列 | | | | |
331
- | 第三方 SDK | | | | |
332
-
333
- ### 4.3 数据存储
334
- - [ ] 数据库(版本 X.x):表名、操作类型
335
- - [ ] 缓存(版本 X.x):Key 模式、过期时间
336
-
337
- ---
338
-
339
- ## 5. 安全与合规
340
-
341
- ### 5.1 权限要求
342
- - 认证方式:
343
- - 授权范围:
344
-
345
- ### 5.2 数据安全
346
- - 敏感字段:
347
- - 加密要求:
348
-
349
- ### 5.3 审计要求
350
- - 日志记录:
351
- - 操作追踪:
352
-
353
- ---
354
-
355
- ## 6. 兼容性
356
-
357
- ### 6.1 接口兼容性
358
- - 是否向后兼容:是/否
359
- - 版本控制策略:
360
-
361
- ### 6.2 数据兼容性
362
- - 数据迁移方案:
363
- - 回滚策略:
364
-
365
- ---
366
-
367
- > **质量红线检查清单**
368
- > - [ ] 每个需求项至少有一个场景
369
- > - [ ] 使用「必须」强制要求,而非「应该」「可以」
370
- > - [ ] 所有接口参数已量化(类型、必填、范围、示例)
371
- > - [ ] 物理约束已量化(并发、超时、性能指标)
372
- > - [ ] 错误码已定义
373
- > - [ ] **技术选型已包含版本信息**
374
- > - [ ] 若跳过 proposal.md,影响范围已在此补齐
375
- ```
376
-
377
- **【关键格式要求】**:
378
- - 每个需求项使用 `#### 需求项:<name>` 格式(4个 #)
379
- - 每个场景 **必须**使用 `##### 场景:<name>`(5个 #)
380
- - 每个需求项 **必须**有至少一个场景
381
- - 使用 当/预期 格式描述场景
382
-
383
- 10. **质量红线自检**
384
-
385
- 对每个 spec.md 文件,逐项确认:
386
- - [ ] 需求项格式正确(`#### 需求项:`,4个#)
387
- - [ ] 场景格式正确(`##### 场景:`,5个#)
388
- - [ ] 每个需求项至少有一个场景
389
- - [ ] 使用「必须」强制要求,而非「应该」「可以」
390
- - [ ] 修改需求包含完整内容而非部分内容
391
- - [ ] **技术选型已包含版本信息**(框架、库、中间件、数据库等)
392
-
393
- 11. **【新增】场景完整性检查**
394
-
395
- **❗ 此步骤是防止场景缺失的关键门禁**
396
-
397
- #### 9.1 需求项-场景配比检查
398
-
399
- | 检查项 | 要求 | 未通过处理 |
400
- |---------|------|------------|
401
- | 场景数量 | 每个需求项至少 1 个场景 | ❗ 警告并要求补充 |
402
- | 场景结构 | 每个场景必须有 当/预期 | ❌ 拒绝通过 |
403
- | 预期结果 | 每个场景必须有可验证的预期 | ❗ 警告 |
404
-
405
- #### 9.2 场景可测试性检查
406
-
407
- - [ ] 输入参数是否可构造(测试数据是否可获取)
408
- - [ ] 预期结果是否可断言(不能是 "XXX 应该正确")
409
- - [ ] 边界条件是否明确(空值、零值、极值)
410
-
411
- #### 9.3 场景缺失预警
412
-
413
- 若发现以下情况,**必须**标记为警告:
414
- - 场景只有需求声明但无详细描述
415
- - 场景描述使用 "等"、"之类" 等模糊词汇
416
- - 场景的预期结果无法量化验证
417
-
418
- **【检查报告格式】**:
419
- ```markdown
420
- ### 场景完整性检查结果
421
-
422
- | 需求项 | 场景数量 | 状态 | 缺失场景 |
423
- |-------------|--------------|------|----------|
424
- | 离散 ATP 计算 | 2 | ✅ 完整 | - |
425
- | 存储地点级别 ATP | 1 | ⚠️ 需补充 | 存储地点 ATP 合并场景 |
426
- | 补货提前期 | 0 | ❌ 缺失 | 采购件/生产件 RLT 场景 |
427
- ```
428
-
429
- **【缺失场景处理】**:
430
- > "⚠️ **场景完整性检查发现以下问题**:
431
- > - 需求项「存储地点级别 ATP」只有 1 个场景,建议补充:存储地点 ATP 合并场景
432
- > - 需求项「补货提前期」缺少场景,需要定义:采购件/生产件场景
433
- >
434
- > 请选择:
435
- > - A. 补充上下文文档后重新生成
436
- > - B. 手动定义缺失场景
437
- > - C. 标记为 '已知风险' 继续"
438
-
439
- **【技术选型版本自检】**:
440
- 扫描文档中提及的技术组件,确认版本信息完整:
441
- - 框架(Spring Boot、Django、Express 等)
442
- - 数据库(MySQL、PostgreSQL、MongoDB 等)
443
- - 缓存(Redis、Memcached 等)
444
- - 消息队列(Kafka、RabbitMQ 等)
445
- - 第三方 SDK/库
446
-
447
- **版本格式要求**:
448
- - 明确主版本号(如 `Redis 7.x`、`MySQL 8.0`)
449
- - 若有特殊版本要求,说明原因(如"需要 Redis 7.0+ 支持 Functions")
450
-
451
- **【自检发现问题时的澄清】**:
452
- - 标记未通过项
453
- - 向用户说明具体问题:
454
- > "质量自检发现以下问题需要澄清:
455
- > - [问题1]:[具体描述]
456
- > - [问题2]:[具体描述]
457
- > 请补充信息或确认标准:"
458
- - 获取用户反馈后,重新生成对应章节
459
-
460
- **如有任意一项未满足,重新生成对应章节,直至全部通过。**
461
-
462
- **【必须输出】质量自检报告**:
463
-
464
- 所有检查完成后,**必须**向用户展示结构化的自检报告(合并步骤10和步骤11的检查结果):
465
-
466
- > "✅ **质量自检报告** - `specs/<capability>/spec.md`
467
- >
468
- > | 检查项 | 状态 | 说明 |
469
- > |--------|------|------|
470
- > | 需求项格式正确(4个#) | ✅/❌ | 共 N 个需求项 |
471
- > | 场景格式正确(5个#) | ✅/❌ | 共 M 个场景 |
472
- > | 每个需求项至少一个场景 | ✅/❌ | |
473
- > | 使用「必须」强制要求 | ✅/⚠️ | |
474
- > | 修改需求包含完整内容 | ✅/❌ | |
475
- > | 技术选型包含版本 | ✅/⚠️ | |
476
- > | 场景完整性 | ✅/⚠️ | 见下方详情 |
477
- > | 场景可测试性 | ✅/⚠️ | |
478
- >
479
- > **结论**:全部通过 ✅ / 存在问题需修复 ❌"
480
-
481
- **未通过项处理**:若有 ❌ 项,自动修复后重新输出报告,直至全部 ✅。
482
-
483
- 12. **【交互引导】确认文档并输出结果**
484
-
485
- 生成所有 spec 文件后,向用户展示概要:
486
- > "已创建以下 spec 文件:
487
- > - specs/user-auth/spec.md:[X] 个需求项,[Y] 个场景
488
- > - specs/data-export/spec.md:[X] 个需求项,[Y] 个场景
489
- >
490
- > 请确认:
491
- > - A. 确认无误,继续创建 design.md
492
- > - B. 需要调整 [具体 capability]
493
- > - C. 补充更多需求项/场景"
494
-
495
- 根据用户反馈处理:
496
- - 选择 A:保存文档,提示下一步
497
- - 选择 B/C:根据反馈修改文档
498
-
499
- 最终输出:
500
- - 创建的文件列表(`specs/<capability>/spec.md`)
501
- - 各文件的需求项和场景数量
502
- - 下一步提示:"运行 `/opsx:design` 创建技术实现方案"
503
-
504
- ---
505
-
506
- **护栏规则**
507
-
508
- - **必须先读取 proposal.md 的能力分解章节**,根据其中定义的能力列表创建对应的 spec 文件
509
- - **每个 capability 创建独立的 `specs/<capability>/spec.md`**
510
- - **必须以 `openspec-templates/spec.md` 为模板基准**,不得使用 `openspec instructions` 返回的简化 template
511
- - `context` 和 `rules` 是你的约束条件,**不得出现在生成的文档中**
512
- - **需求项格式必须正确**:`#### 需求项:<name>`(4个 #)
513
- - **场景必须使用 5 个 #**:`##### 场景:<name>`(5个 #)
514
- - 每个需求项必须有至少一个场景
515
- - 使用「必须」强制要求,而非「应该」「可以」
516
- - 文档写入后验证文件确实存在
517
- - **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Spec 阶段,代码操作请在完成文档后使用 `/opsx:apply` 执行。」
518
- - **⛔ 单阶段原则:完成 spec.md 后必须立即停止**。仅提示用户下一步可运行 `/opsx:design`,**绝对禁止自动执行 design/task 等后续阶段**。每个阶段必须由用户主动触发。
519
-
520
- > **🖥️ 跨平台执行规则**
521
- > - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
522
- > - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
523
- > - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
524
- > - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
525
- > **📊 Telemetry(必做,不得跳过)**
526
- > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=spec --project=. --change=<变更名称> --capability=<capability-name> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`