kld-sdd 2.4.13 → 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,405 +0,0 @@
1
- ---
2
- name: OPSX: Propose
3
- description: "创建业务意图文档 - 定义变更的 Why 和上下文总览"
4
- argument-hint: "[change-name] [上下文文件...]"
5
- ---
6
-
7
- 创建 **proposal.md** - 业务意图与上下文总览文档(聚焦 Why)。
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
-
15
- > **📊 Telemetry(必做,不得跳过)**
16
- > 在终端执行(必须成功):`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`,记录返回的 event_id。
17
-
18
- > **⚠️ 阶段边界提示**
19
- >
20
- > 当前处于 **Propose(规划)阶段**,此阶段:
21
- > - ✅ **允许**:创建/编辑 proposal.md 文档、读取代码/文档作为上下文分析
22
- > - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
23
- > - ⛔ **单阶段原则**:完成 proposal.md 后**必须立即停止**,等待用户主动触发下一阶段
24
- >
25
- > 即使用户提供了代码作为上下文,也只用于理解需求背景,**不执行任何代码操作**。
26
- > 代码实现将在 `/opsx:apply` 阶段进行。
27
- > **完成本阶段后,绝对禁止自动继续执行 spec/design/task 等后续阶段。**
28
-
29
- ---
30
-
31
- **执行步骤**
32
-
33
- 0. **【Telemetry 必做】记录阶段开始**
34
-
35
- 在终端执行(若命令失败必须中止本阶段,不得跳过):
36
- ```bash
37
- node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>
38
- ```
39
- 保存输出 JSON 中的 `event_id`,供阶段结束使用。
40
-
41
- 1. **【交互引导】若未提供输入,询问用户**
42
-
43
- 使用 **AskUserQuestion** 询问用户:
44
- > "请描述本次变更的业务需求:
45
- > 1. 要解决什么问题?(现状痛点)
46
- > 2. 达成什么目标?(期望结果)
47
- > 3. 涉及哪些模块/系统?
48
- > 4. 有什么约束条件?(时间/技术/资源)"
49
-
50
- 从描述中推导 kebab-case 名称,如 "add user authentication" → `add-user-auth`。
51
-
52
- **【澄清机制】若用户描述模糊,主动追问**:
53
- - 若目标不明确:"请用一句话明确本次变更要达成的具体目标"
54
- - 若影响范围不清:"请列出本次变更涉及的所有模块/服务"
55
- - 若约束未提及:"是否有时间限制、技术约束或依赖前提?"
56
-
57
- **重要**:未明确需求前不得继续。
58
-
59
- 2. **【上下文加载】识别并读取用户提供的文件**
60
-
61
- **自动识别上下文文件**:
62
- 若用户在命令中指定了文件路径(如 `/opsx:propose atp-calc ./需求.md ./算法逻辑.md`),
63
- 或在对话中附加/引用了文件,**必须自动读取这些文件**。
64
-
65
- **文件识别规则**:
66
- - 以 `.md`、`.txt`、`.java`、`.ts` 等扩展名结尾的参数 → 识别为文件路径
67
- - 以 `/` 或 `./` 开头的参数 → 识别为路径
68
- - 目录路径 → 递归读取目录下的文件
69
-
70
- **示例**:
71
- ```
72
- /opsx:propose atp-calc ./需求文档/ATP引擎算法逻辑.md
73
- /opsx:propose atp-calc ./需求.md ./erp-algorithm-atp/src/
74
- ```
75
-
76
- **上下文记录**:
77
- 如果用户提供了参考文档,在 proposal.md 中记录:
78
- ```markdown
79
- ## 参考上下文
80
-
81
- | 上下文来源 | 文件路径 | 用途说明 |
82
- |------------|---------|----------|
83
- | 需求文档 | ./ATP引擎算法逻辑.md | 算法需求详细定义 |
84
- | 参考代码 | ./erp-algorithm-atp/ | 现有实现参考 |
85
- ```
86
-
87
- 3. **【交互引导】上下文补充提示**
88
-
89
- **若用户未提供任何上下文文件**,AI 分析需求描述后,**主动提示用户补充**:
90
-
91
- **上下文缺失检测**:
92
- - 需求描述中提及复杂算法或业务规则,但未提供详细定义
93
- - 提及现有系统/代码,但未提供参考
94
- - 涉及迁移、重构或算法复制
95
-
96
- **【关键】具体化建议**:
97
- AI 必须**引用用户需求中的具体内容**给出建议:
98
- ```
99
- ❌ 错误(太泛泛):"建议提供算法说明文档"
100
- ✅ 正确(具体):"您提到了《ATP计算引擎》,建议提供 ATP 引擎算法逻辑文档"
101
- ✅ 正确(具体):"您提到要迁移 erp-algorithm-atp,建议提供该项目的源代码"
102
- ```
103
-
104
- **主动提示模板**:
105
- > "📌 **建议提供更丰富的上下文信息**:
106
- >
107
- > 您的需求中提到:
108
- > - **《[XX算法/规则]》** - 建议提供该算法的详细逻辑说明文档
109
- > - **《[XX现有项目]》** - 建议提供该项目的源代码作为参考
110
- >
111
- > 您可以:
112
- > - **在命令后追加文件路径**:`/opsx:propose atp-calc ./需求.md ./参考代码/`
113
- > - **在对话中上传文件**或粘贴内容
114
- > - **告诉我文件位置**,我会自动读取
115
- >
116
- > 或者选择:
117
- > - A. 基于现有信息继续(可能导致缺失)
118
- > - B. 已提供全部信息"
119
-
120
- 4. **创建变更目录(如不存在则新建)**
121
- ```bash
122
- openspec new change "<name>"
123
- ```
124
- 此命令在 `openspec/changes/<name>/` 创建变更目录和 `.openspec.yaml`。
125
-
126
- **【交互引导】若变更已存在**:
127
- - 询问用户:"变更 `<name>` 已存在,请选择:
128
- - A. 覆盖原有变更(删除重建)
129
- - B. 继续编辑现有变更
130
- - C. 取消操作"
131
- - 根据用户选择执行对应操作
132
-
133
- 5. **【关键步骤】读取本地模板文件**
134
-
135
- **必须先读取** `openspec-templates/proposal.md` 作为文档结构模板:
136
- ```
137
- 使用 Read 工具读取:openspec-templates/proposal.md
138
- ```
139
-
140
- 此模板定义了文档的完整结构,包括:
141
- - 章节编号和命名
142
- - 子章节结构(如 1.1 现状问题、1.2 业务诉求)
143
- - 格式要求(checkbox、代码块、表格等)
144
- - 质量红线检查清单
145
-
146
- **【重要】不得使用 `openspec instructions` 返回的简化 template,必须以 `openspec-templates/proposal.md` 为准。**
147
-
148
- 6. **获取项目上下文(可选)**
149
- ```bash
150
- openspec instructions proposal --change "<name>" --json
151
- ```
152
- 解析返回的 JSON,仅获取:
153
- - `context`:项目背景约束(**仅供你参考,不要写入文档**)
154
- - `rules`:文档编写规则(**仅供你参考,不要写入文档**)
155
- - `outputPath`:文档输出路径
156
- - `dependencies`:前置依赖文件路径(如有,先读取)
157
-
158
- **注意**:忽略返回的 `template` 字段,使用步骤 3 读取的本地模板。
159
-
160
- 7. **读取已有上下文(如有依赖)**
161
-
162
- 按 `dependencies` 中的路径读取已完成文件,作为编写参考。
163
-
164
- 8. **【AI 分析澄清】分析需求完整性**
165
-
166
- 在生成文档前,AI 应分析用户提供的信息:
167
-
168
- **完整性检查**:
169
- - [ ] 是否有明确的问题描述?
170
- - [ ] 是否有可衡量的目标?
171
- - [ ] 是否涉及具体模块?
172
- - [ ] 是否有时间/资源约束?
173
-
174
- **【发现缺失时主动询问】**:
175
- > "我发现以下信息还不够清晰,请补充:
176
- > - [具体问题]
177
- > 补充后我将重新生成文档。"
178
-
179
- 9. **【交互引导】文档拆分模式选择**
180
-
181
- **❗ 必须主动询问用户,不得默认选择**
182
-
183
- 分析需求中的能力域数量后,使用 **AskUserQuestion** 询问用户:
184
- > "📋 **检测到需求包含以下能力域:**
185
- > - [能力域列表]
186
- >
187
- > 🤔 **请选择文档拆分模式:**
188
- >
189
- > **A) 完整模式** - 每个能力域独立文档
190
- > - 目录结构:`specs/<capability>/spec.md`, `specs/<capability>/design.md`, `specs/<capability>/tasks.md`
191
- > - 适合:大需求、多人协作、需要精细管控
192
- >
193
- > **B) 简化模式** - 单一文档
194
- > - 目录结构:`spec.md`, `design.md`, `tasks.md`(合并所有能力域)
195
- > - 适合:小需求、单人快速迭代
196
- >
197
- > **C) 自动判断** - 根据能力域数量自动选择
198
- > - 单个能力域 → 简化模式
199
- > - 多个能力域 → 完整模式"
200
-
201
- 根据用户选择:
202
- - 选择 A:设置 `mode: full`
203
- - 选择 B:设置 `mode: simple`
204
- - 选择 C:根据能力域数量自动判断并设置
205
-
206
- **将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
207
-
208
- 10. **【交互引导】测试策略选择**
209
-
210
- **❗ 必须主动询问用户,不得默认选择**
211
-
212
- 使用 **AskUserQuestion** 询问用户:
213
- > "🧪 **请选择测试策略:**
214
- >
215
- > **A) 测试驱动 (TDD)** - 测试先行
216
- > - 先生成测试任务,实现任务依赖测试任务
217
- > - DAG: 测试骨架 → 实现代码 → 测试验证
218
- > - 适合:核心业务逻辑、质量要求高
219
- >
220
- > **B) 实现优先** - 代码先行
221
- > - 先生成实现任务,测试作为验证步骤
222
- > - DAG: 实现代码 → 测试验证
223
- > - 适合:UI 层、配置类、快速原型
224
- >
225
- > **C) 无测试** - 仅实现
226
- > - 不生成测试任务,仅编译检查
227
- > - 适合:简单配置、文档更新"
228
-
229
- 根据用户选择:
230
- - 选择 A:设置 `test-strategy: tdd`
231
- - 选择 B:设置 `test-strategy: impl-first`
232
- - 选择 C:设置 `test-strategy: none`
233
-
234
- **将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
235
-
236
- 11. **创建 proposal.md**
237
-
238
- **以 `openspec-templates/proposal.md` 的结构为骨架**,填充内容到 `outputPath`:
239
-
240
- **【质量红线】生成文档必须严格遵循模板结构:**
241
-
242
- ```markdown
243
- # proposal.md - 业务意图与上下文总览
244
-
245
- > **定位**:变更的业务意图(Why)与上下文总览
246
- >
247
- > **可选性**:【可跳过,直入spec】若跳过,必须将"影响范围"在 specs 中补齐
248
-
249
- ---
250
-
251
- ## 1. 需求背景
252
-
253
- ### 1.1 现状问题
254
- - [具体痛点,禁止泛化描述]
255
-
256
- ### 1.2 业务诉求
257
- - [为什么要做这件事]
258
-
259
- ---
260
-
261
- ## 2. 业务目标
262
-
263
- | 目标维度 | 具体描述 | 验收标准 |
264
- |---------|---------|----------|
265
- | 功能目标 | | |
266
- | 性能目标 | | |
267
- | 体验目标 | | |
268
-
269
- ---
270
-
271
- ## 3. 能力分解
272
-
273
- <!-- 【关键章节】此处定义的 capability 决定后续 specs/ 的文件结构 -->
274
-
275
- ### 3.1 新增能力
276
- <!-- 每个能力会创建 specs/<name>/spec.md,使用 kebab-case 命名 -->
277
- - `<capability-name>`: <能力简要描述>
278
-
279
- ### 3.2 修改能力
280
- <!-- 仅当已有能力的需求级别变更时填写,检查 openspec/specs/ 现有规格 -->
281
- - `<existing-name>`: <修改什么需求>
282
-
283
- ---
284
-
285
- ## 4. 影响范围
286
-
287
- ### 4.1 涉及模块
288
- - [ ] 模块A:影响描述
289
- - [ ] 模块B:影响描述
290
-
291
- ### 4.2 依赖关系
292
- ```
293
- [上游依赖] --> [本变更] --> [下游影响]
294
- ```
295
-
296
- ### 4.3 数据影响
297
- - 数据库表变更:
298
- - 接口变更:
299
- - 配置变更:
300
-
301
- ---
302
-
303
- ## 5. 约束与假设
304
-
305
- ### 5.1 业务约束
306
- -
307
-
308
- ### 5.2 技术约束
309
- -
310
-
311
- ### 5.3 前置依赖
312
- - [ ] 依赖项1:状态
313
- - [ ] 依赖项2:状态
314
-
315
- ---
316
-
317
- ## 6. 风险评估
318
-
319
- | 风险项 | 概率 | 影响 | 应对策略 |
320
- |-------|------|------|---------|
321
- | | | | |
322
-
323
- ---
324
-
325
- ## 7. 相关文档
326
-
327
- - 需求文档:
328
- - 原型链接:
329
- - 参考文档:
330
-
331
- ---
332
-
333
- > **质量红线检查清单**
334
- > - [ ] 逻辑链路已闭环
335
- > - [ ] 受影响模块已明确
336
- > - [ ] 依赖关系已梳理
337
- > - [ ] 若跳过本文档,影响范围已在 specs 中补齐
338
- > - [ ] 能力分解章节已明确列出所有能力
339
- ```
340
-
341
- 12. **质量红线自检**
342
-
343
- 写入文档前,逐项确认:
344
- - [ ] 文档结构完全符合 `openspec-templates/proposal.md` 模板
345
- - [ ] 章节编号和命名正确(如 `## 1. 需求背景` 而非 `## Why`)
346
- - [ ] 子章节结构正确(如 `### 1.1 现状问题`、`### 1.2 业务诉求`)
347
- - [ ] 涉及模块使用 checkbox 格式(`- [ ] 模块A`)
348
- - [ ] 依赖关系使用代码块图示
349
- - [ ] 前置依赖使用 checkbox 格式
350
- - [ ] 文档末尾包含质量红线检查清单
351
-
352
- **【自检发现问题时的处理】**:
353
- - 标记未通过的项
354
- - 分析问题原因(信息不足/理解偏差/描述模糊)
355
- - 向用户说明问题并请求澄清:
356
- > "质量自检发现 [问题描述],请补充以下信息:"
357
- - 获取补充信息后,重新生成对应章节
358
-
359
- **如有任意一项未满足,重新生成对应章节,直至全部通过。**
360
-
361
- 13. **【交互引导】确认文档并输出结果**
362
-
363
- 生成文档后,向用户展示文档概要:
364
- > "已生成 proposal.md 草案,概要如下:
365
- > - 变更名称:[name]
366
- > - 核心目标:[一句话总结]
367
- > - 影响模块:[模块列表]
368
- >
369
- > 请确认:
370
- > - A. 确认无误,继续创建 specs
371
- > - B. 需要修改 [具体章节]
372
- > - C. 补充更多信息"
373
-
374
- 根据用户反馈:
375
- - 选择 A:保存文档,提示下一步
376
- - 选择 B/C:根据反馈修改文档
377
-
378
- **【关键提示】**:向用户确认能力列表:
379
- > "根据 proposal,将创建以下 specs 文件:
380
- > - specs/<capability-1>/spec.md
381
- > - specs/<capability-2>/spec.md
382
- > ...
383
- > 请确认能力列表是否完整?"
384
-
385
- 最终输出:
386
- - 文档路径(来自 `outputPath`)
387
- - 内容摘要(背景 + 目标 + 影响模块)
388
- - 下一步提示:"运行 `/opsx:spec` 创建技术契约文档 (specs/<capability>/spec.md)"
389
-
390
- ---
391
-
392
- **护栏规则**
393
-
394
- - **必须以 `openspec-templates/proposal.md` 为模板基准**,不得使用 `openspec instructions` 返回的简化 template
395
- - `context` 和 `rules` 是你的约束条件,**不得出现在生成的文档中**
396
- - proposal.md 聚焦【Why】,不要写技术实现细节(留给 design.md)
397
- - 不要写 API 细节(留给 specs)
398
- - **能力分解章节是关键**:每个列出的 capability 会创建对应的 `specs/<name>/spec.md`
399
- - 若跳过此文档,后续 specs 必须补齐影响范围
400
- - 文档写入后验证文件确实存在于 `outputPath`
401
- - **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx:apply` 执行。」
402
- - **⛔ 单阶段原则:完成 proposal.md 后必须立即停止**。仅提示用户下一步可运行 `/opsx:spec`,**绝对禁止自动执行 spec/design/task 等后续阶段**。每个阶段必须由用户主动触发。
403
-
404
- > **📊 Telemetry(必做,不得跳过)**
405
- > 在终端执行(必须成功):`node skywalk-sdd/log.cjs end --event-id=<开头记录的event_id> --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success/failure --summary="一句话摘要"`