kld-sdd 2.4.18 → 2.5.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/lib/init.js +56 -41
- package/package.json +1 -1
- package/skywalk-sdd/index.cjs +1808 -129
- package/templates/hooks/claude/hooks/sdd-apply-test-gate.cjs +175 -28
- package/templates/hooks/claude/hooks/sdd-post-tool.cjs +42 -21
- package/templates/openspec/proposal.md +0 -1
- package/templates/openspec/spec.md +2 -2
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +64 -355
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +94 -0
- package/templates/skills/kld-sdd/opsx-apply/reference.md +403 -0
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +21 -5
- package/templates/skills/kld-sdd/opsx-archive/checklist.md +33 -0
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +28 -4
- package/templates/skills/kld-sdd/opsx-check/checklist.md +37 -0
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +46 -50
- package/templates/skills/kld-sdd/opsx-design/checklist.md +46 -0
- package/templates/skills/kld-sdd/opsx-design/reference.md +44 -0
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +51 -95
- package/templates/skills/kld-sdd/opsx-propose/checklist.md +44 -0
- package/templates/skills/kld-sdd/opsx-propose/reference.md +94 -0
- package/templates/skills/kld-sdd/opsx-spec/SKILL.md +46 -50
- package/templates/skills/kld-sdd/opsx-spec/checklist.md +46 -0
- package/templates/skills/kld-sdd/opsx-spec/reference.md +49 -0
- package/templates/skills/kld-sdd/opsx-task/SKILL.md +42 -45
- package/templates/skills/kld-sdd/opsx-task/checklist.md +46 -0
- package/templates/skills/kld-sdd/opsx-task/reference.md +40 -0
- package/templates/skills/kld-sdd/opsx-test/SKILL.md +12 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
2
|
name: opsx-design
|
|
3
3
|
description: "技术设计文档技能 - 针对单一 Capability 创建局部技术实现方案"
|
|
4
4
|
argument-hint: "[change-name] [capability-name] [上下文文件...]"
|
|
@@ -25,23 +25,23 @@ allowed-tools:
|
|
|
25
25
|
>
|
|
26
26
|
> 代码实现将在 `/opsx-apply` 阶段进行。
|
|
27
27
|
> **完成本阶段后,绝对禁止自动继续执行 task 等后续阶段。**
|
|
28
|
+
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
28
29
|
|
|
29
30
|
> **⚠️ 渐进式上下文加载原则**
|
|
30
31
|
>
|
|
31
|
-
> - 本技能针对**单一 Capability**
|
|
32
|
-
> -
|
|
33
|
-
> -
|
|
34
|
-
> -
|
|
35
|
-
|
|
32
|
+
> - 本技能针对**单一 Capability** 执行设计(Simple 模式例外,见下方 S1 说明)
|
|
33
|
+
> - **输入路径**(Full 模式):`changes/<name>/specs/<capability>/spec.md`
|
|
34
|
+
> - **输出路径**(Full 模式):`changes/<name>/specs/<capability>/design.md`
|
|
35
|
+
> - **输入路径**(Simple 模式):`changes/<name>/spec.md`
|
|
36
|
+
> - **输出路径**(Simple 模式):`changes/<name>/design.md`
|
|
37
|
+
> - ⛔ **隔离红线**:绝对禁止跨目录读取同级其他 Capability 的 spec 或 design(Full 模式)
|
|
36
38
|
|
|
37
39
|
> **🖥️ 跨平台执行规则**
|
|
38
40
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
39
41
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
40
42
|
> - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
|
|
41
43
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
42
|
-
> **📊 Telemetry(必做,不得跳过)**
|
|
43
|
-
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
44
|
-
> - 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
44
|
+
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
45
45
|
|
|
46
46
|
---
|
|
47
47
|
|
|
@@ -50,7 +50,7 @@ allowed-tools:
|
|
|
50
50
|
| 维度 | 内容 |
|
|
51
51
|
|------|------|
|
|
52
52
|
| 核心问题 | How - 单一 Capability 如何实现 |
|
|
53
|
-
| 关键输出 | specs/<capability>/design.md |
|
|
53
|
+
| 关键输出 | Full: `specs/<capability>/design.md` / Simple: `design.md` |
|
|
54
54
|
| 上游依赖 | overview.md → proposal.md → 当前 capability 的 spec.md |
|
|
55
55
|
| 下游依赖 | tasks.md |
|
|
56
56
|
|
|
@@ -58,6 +58,12 @@ allowed-tools:
|
|
|
58
58
|
|
|
59
59
|
## 启动流程
|
|
60
60
|
|
|
61
|
+
### 0. 【S1 模式检测】读取 proposal.md mode
|
|
62
|
+
|
|
63
|
+
读取当前变更的 `proposal.md` frontmatter,提取 `mode` 字段:
|
|
64
|
+
- `mode: simple` → Simple 模式(design.md 落变更根目录,跳过 Capability 选择)
|
|
65
|
+
- `mode: full` 或未设置 → Full 模式(默认,design.md 落 specs/<capability>/)
|
|
66
|
+
|
|
61
67
|
### 1. 【交互引导】确认变更名称和 Capability
|
|
62
68
|
|
|
63
69
|
**步骤 1a - 确认变更名称**:
|
|
@@ -84,15 +90,9 @@ openspec list
|
|
|
84
90
|
|
|
85
91
|
### 2. 【上下文加载】识别并读取用户提供的文件
|
|
86
92
|
|
|
87
|
-
|
|
88
|
-
若用户在命令中指定了文件路径,或在对话中附加/引用了文件,**必须自动读取这些文件**。
|
|
93
|
+
**自动识别上下文文件**:若用户在命令中指定了文件路径,或在对话中附加/引用了文件,**必须自动读取这些文件**。
|
|
89
94
|
|
|
90
|
-
|
|
91
|
-
| 上下文类型 | 用途 | 如何融入 design |
|
|
92
|
-
|------------|------|----------------|
|
|
93
|
-
| 代码文件 | 分析现有实现、依赖关系 | 确定代码锚点、修改策略 |
|
|
94
|
-
| 架构文档 | 了解系统边界、模块关系 | 对齐总体设计方向 |
|
|
95
|
-
| 数据库 Schema | 了解数据模型约束 | 纳入数据设计章节 |
|
|
95
|
+
> 上下文类型(代码文件 / 架构文档 / 数据库 Schema)与用途见 `./reference.md`「§2 上下文类型与用途」。
|
|
96
96
|
|
|
97
97
|
**【可选】业务知识库检索**:
|
|
98
98
|
设计涉及 MM/CO 领域概念且 spec 未充分定义时,可调用 **opsx-knowledge** skill。
|
|
@@ -100,20 +100,7 @@ openspec list
|
|
|
100
100
|
|
|
101
101
|
### 3. 渐进式上下文加载
|
|
102
102
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
```
|
|
106
|
-
第 1 层:全局基线
|
|
107
|
-
→ openspec/specs/overview.md
|
|
108
|
-
|
|
109
|
-
第 2 层:宏观背景
|
|
110
|
-
→ changes/<name>/proposal.md
|
|
111
|
-
|
|
112
|
-
第 3 层:精准打击(仅当前 Capability)
|
|
113
|
-
→ changes/<name>/specs/<capability>/spec.md
|
|
114
|
-
|
|
115
|
-
⛔ 隔离红线:禁止读取其他 Capability 的文档!
|
|
116
|
-
```
|
|
103
|
+
> ⛔ 必须严格按 overview.md → proposal.md → 当前 capability spec.md 顺序加载;隔离红线:禁止读取其他 Capability 的文档。**完整层级图见 `./reference.md`「§3 渐进式上下文加载层级图」**。
|
|
117
104
|
|
|
118
105
|
### 4. 【关键步骤】读取本地模板文件
|
|
119
106
|
|
|
@@ -143,18 +130,19 @@ openspec list
|
|
|
143
130
|
|
|
144
131
|
**输出路径**:`changes/<name>/specs/<capability>/design.md`
|
|
145
132
|
|
|
146
|
-
###
|
|
133
|
+
### 6.5 【version 正则注释】允许前导零
|
|
134
|
+
|
|
135
|
+
design.md 中若使用 version 正则约束(如格式校验 `^\d+\.\d+\.\d+$`),需在正则旁**标注「允许前导零」**:
|
|
136
|
+
|
|
137
|
+
- `^\d+\.\d+\.\d+$` 允许 `01.02.003` 这类前导零版本号(`\d+` 不限制首位非零)。
|
|
138
|
+
- 若业务要求**禁止前导零**(语义化版本规范),应收紧为 `^0*[1-9]\d*\.[0-9]+\.[0-9]+$`,或由用户确认是否放宽,并在 design.md 注明决策。
|
|
139
|
+
- 本次仅加注释说明,不强制收紧正则;标注后让 reviewer 一眼看出该正则的前导零行为。
|
|
147
140
|
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
- [ ] 字段完整性追溯表已填写
|
|
152
|
-
- [ ] 代码锚点已明确(现有代码修改点)
|
|
153
|
-
- [ ] 外部依赖已列出
|
|
154
|
-
- [ ] 异常处理策略已定义
|
|
155
|
-
- [ ] 文档末尾包含质量红线检查清单
|
|
141
|
+
> 目的:避免 version 正则隐式接受前导零而无人知晓,导致版本号格式契约与预期不符。
|
|
142
|
+
|
|
143
|
+
### 7. 质量红线自检
|
|
156
144
|
|
|
157
|
-
|
|
145
|
+
> 写入文档前逐项确认,完整 7 项自检清单见 `./checklist.md`「§7 质量红线自检」。如有任意一项未满足,重新生成对应章节,直至全部通过。
|
|
158
146
|
|
|
159
147
|
### 8. 【交互引导】确认文档并输出结果
|
|
160
148
|
|
|
@@ -178,11 +166,19 @@ openspec list
|
|
|
178
166
|
|
|
179
167
|
## Guardrails
|
|
180
168
|
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
-
|
|
184
|
-
-
|
|
185
|
-
-
|
|
186
|
-
-
|
|
187
|
-
-
|
|
188
|
-
- **⛔
|
|
169
|
+
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
170
|
+
|
|
171
|
+
- **必须以 `openspec-templates/design.md` 为模板基准**。
|
|
172
|
+
- **⛔ 渐进式加载**:严格按 overview.md → proposal.md → spec.md 顺序加载。
|
|
173
|
+
- **⛔ 隔离红线**:绝对禁止跨目录读取同级其他 Capability 的 spec 或 design。
|
|
174
|
+
- design.md 聚焦【How】,是 spec.md → tasks.md 的桥梁;必须 100% 覆盖 spec.md 定义的需求项。
|
|
175
|
+
- 代码锚点必须具体到类/方法级别。
|
|
176
|
+
- **⛔ 阶段边界**:禁止执行任何代码创建/修改操作。
|
|
177
|
+
- **⛔ 单阶段原则**:完成 design.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-task`,绝对禁止自动执行 task 等后续阶段。每个阶段必须由用户主动触发。
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## 渐进披露
|
|
182
|
+
|
|
183
|
+
- Read `checklist.md` 仅在执行 design 需要校验时 — 含阶段边界⛔(Design 阶段约束)、§7 质量红线自检(7 项)、Guardrails ⛔ 强制项勾选表。
|
|
184
|
+
- Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§2 上下文类型与用途表、§3 渐进式上下文加载层级图。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-design 的阶段强制检查点与自检清单。仅在执行 design 需要校验时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-design — 检查清单(checklist)
|
|
6
|
+
|
|
7
|
+
> 执行 opsx-design 时逐项校验。含阶段边界⛔、§7 质量红线自检、Guardrails ⛔ 强制项。
|
|
8
|
+
> 详细模板(telemetry 命令 / §2 上下文类型表 / §3 加载层级图)见 `./reference.md`。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 阶段边界⛔(Design 阶段约束)
|
|
13
|
+
|
|
14
|
+
- [ ] ✅ 允许:创建/编辑 design.md 文档、读取代码/文档作为上下文分析
|
|
15
|
+
- [ ] ❌ 禁止:创建/修改任何代码文件、执行代码生成、运行测试
|
|
16
|
+
- [ ] ⛔ 单阶段原则:完成 design.md 后必须立即停止,等待用户主动触发下一阶段
|
|
17
|
+
- [ ] 代码实现将在 `/opsx-apply` 阶段进行
|
|
18
|
+
- [ ] ⛔ 完成本阶段后绝对禁止自动继续执行 task 等后续阶段
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## §7 质量红线自检
|
|
23
|
+
|
|
24
|
+
写入文档前,逐项确认:
|
|
25
|
+
- [ ] 文档结构完全符合 `openspec-templates/design.md` 模板
|
|
26
|
+
- [ ] 100% 覆盖 spec.md 中的所有需求项
|
|
27
|
+
- [ ] 字段完整性追溯表已填写
|
|
28
|
+
- [ ] 代码锚点已明确(现有代码修改点)
|
|
29
|
+
- [ ] 外部依赖已列出
|
|
30
|
+
- [ ] 异常处理策略已定义
|
|
31
|
+
- [ ] 文档末尾包含质量红线检查清单
|
|
32
|
+
|
|
33
|
+
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Guardrails ⛔ 强制项
|
|
38
|
+
|
|
39
|
+
- [ ] 必须以 `openspec-templates/design.md` 为模板基准
|
|
40
|
+
- [ ] ⛔ **渐进式加载**:严格按 overview.md → proposal.md → spec.md 顺序加载(层级图见 `./reference.md`「§3」)
|
|
41
|
+
- [ ] ⛔ **隔离红线**:绝对禁止跨目录读取同级其他 Capability 的 spec 或 design
|
|
42
|
+
- [ ] design.md 聚焦【How】,是 spec.md → tasks.md 的桥梁
|
|
43
|
+
- [ ] 必须 100% 覆盖 spec.md 定义的需求项
|
|
44
|
+
- [ ] 代码锚点必须具体到类/方法级别
|
|
45
|
+
- [ ] ⛔ **阶段边界**:禁止执行任何代码创建/修改操作
|
|
46
|
+
- [ ] ⛔ **单阶段原则**:完成 design.md 后必须立即停止;仅提示用户下一步可运行 `/opsx-task`,绝对禁止自动执行 task 等后续阶段。每个阶段必须由用户主动触发。
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-design 的详细模板:telemetry 命令、上下文类型表、渐进式加载层级图。仅在需要参考详细模板时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-design — 详细参考(reference)
|
|
6
|
+
|
|
7
|
+
> 本文件承载 opsx-design 的重细节模板:telemetry 命令、§2 上下文类型表、§3 渐进式上下文加载层级图。
|
|
8
|
+
> SKILL.md 保留入口骨架与指针;本文件为详细模板来源。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
|
+
|
|
14
|
+
> 阶段开始:`node skywalk-sdd/log.cjs start --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=design --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## §2 上下文类型与用途
|
|
20
|
+
|
|
21
|
+
| 上下文类型 | 用途 | 如何融入 design |
|
|
22
|
+
|------------|------|----------------|
|
|
23
|
+
| 代码文件 | 分析现有实现、依赖关系 | 确定代码锚点、修改策略 |
|
|
24
|
+
| 架构文档 | 了解系统边界、模块关系 | 对齐总体设计方向 |
|
|
25
|
+
| 数据库 Schema | 了解数据模型约束 | 纳入数据设计章节 |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## §3 渐进式上下文加载层级图
|
|
30
|
+
|
|
31
|
+
**⛔ 必须严格按以下顺序加载:**
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
第 1 层:全局基线
|
|
35
|
+
→ openspec/specs/overview.md
|
|
36
|
+
|
|
37
|
+
第 2 层:宏观背景
|
|
38
|
+
→ changes/<name>/proposal.md
|
|
39
|
+
|
|
40
|
+
第 3 层:精准打击(仅当前 Capability)
|
|
41
|
+
→ changes/<name>/specs/<capability>/spec.md
|
|
42
|
+
|
|
43
|
+
⛔ 隔离红线:禁止读取其他 Capability 的文档!
|
|
44
|
+
```
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
|
|
1
|
+
---
|
|
2
2
|
name: opsx-propose
|
|
3
3
|
description: "业务意图文档技能 - 引导创建 proposal.md,定义变更的 Why 和上下文总览"
|
|
4
4
|
argument-hint: "[change-name] [上下文文件...]"
|
|
@@ -26,16 +26,14 @@ allowed-tools:
|
|
|
26
26
|
> 即使用户提供了代码作为上下文,也只用于理解需求背景,**不执行任何代码操作**。
|
|
27
27
|
> 代码实现请引导用户使用 `/opsx-apply` 命令。
|
|
28
28
|
> **完成本阶段后,绝对禁止自动继续执行 spec/design/task 等后续阶段。**
|
|
29
|
-
|
|
29
|
+
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
30
30
|
|
|
31
31
|
> **🖥️ 跨平台执行规则**
|
|
32
32
|
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
33
33
|
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
34
34
|
> - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
|
|
35
35
|
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
36
|
-
> **📊 Telemetry(必做,不得跳过)**
|
|
37
|
-
> - 阶段开始:`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
38
|
-
> - 阶段结束:`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="摘要"`
|
|
36
|
+
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
39
37
|
|
|
40
38
|
---
|
|
41
39
|
|
|
@@ -92,20 +90,41 @@ allowed-tools:
|
|
|
92
90
|
遇到不明 MM/CO 业务名词时,可调用 **opsx-knowledge** skill 查询 RAGFlow 知识库。
|
|
93
91
|
结果仅作 `📚 知识库建议`,不得写入 proposal 强制约束;查询失败时继续主流程。
|
|
94
92
|
|
|
95
|
-
### 3.
|
|
93
|
+
### 3. 创建变更目录(先检测后创建,避免「先 new 后问」)
|
|
96
94
|
|
|
95
|
+
**第 1 步:检测变更是否已存在**。先检测,**不要直接 `openspec new change`**:
|
|
97
96
|
```bash
|
|
98
|
-
openspec
|
|
97
|
+
openspec list --json 2>/dev/null || true
|
|
99
98
|
```
|
|
99
|
+
或直接探测 `openspec/changes/<name>/` 是否存在(含 `.openspec.yaml` 或 `proposal.md`)。排除 `logs/` 目录——`logs/` 是 telemetry 自动创建的,不代表变更已初始化。
|
|
100
100
|
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
- 询问用户:"变更 `<name>` 已存在,请选择:
|
|
101
|
+
**第 2 步:根据检测结果决定**:
|
|
102
|
+
- **不存在** → 直接执行第 3 步创建。
|
|
103
|
+
- **已存在** → 先询问用户,**不要直接 new**:"变更 `<name>` 已存在,请选择:
|
|
105
104
|
- A. 覆盖原有变更(删除重建)
|
|
106
105
|
- B. 继续编辑现有变更
|
|
107
106
|
- C. 取消操作"
|
|
108
|
-
-
|
|
107
|
+
- **若目录仅含 `logs/`(无 `.openspec.yaml` 且无 `proposal.md`)**:提示用户"检测到残留空变更目录(仅含 telemetry 自动创建的 logs/),建议选 A 覆盖重建,避免复用空目录导致后续流程混淆"
|
|
108
|
+
- 用户选 A → 先删除 `openspec/changes/<name>/` 再执行第 3 步;选 B → 跳过创建直接进入 §4;选 C → 终止。
|
|
109
|
+
|
|
110
|
+
**第 3 步:创建变更目录**(仅在不存在或用户确认覆盖后执行):
|
|
111
|
+
```bash
|
|
112
|
+
openspec new change "<name>"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
此命令在 `openspec/changes/<name>/` 创建变更目录和 `.openspec.yaml`。
|
|
116
|
+
|
|
117
|
+
### 3.5 【首次检测】overview.md 全局契约空模板引导
|
|
118
|
+
|
|
119
|
+
首次 propose 时,检测全局契约 `openspec/specs/overview.md` 是否仍为空模板(质量红线清单全未勾选):
|
|
120
|
+
|
|
121
|
+
1. 读取 `openspec/specs/overview.md`(若文件不存在视为空模板)。
|
|
122
|
+
2. 检查质量红线清单是否有任意一项已勾选(`- [x]`)。
|
|
123
|
+
3. 若**全未勾选**(空模板)→ 主动提示用户:「检测到全局契约 `overview.md` 尚未填充(质量红线清单未勾选)。建议先补全项目级 overview(技术栈/约束/领域语言),避免每个变更重复声明上下文。是否现在填充?可跳过继续本次 propose。」
|
|
124
|
+
- 用户选择跳过 → 继续 §4,并在 proposal.md 标注「overview.md 待补」。
|
|
125
|
+
4. 已勾选(非空模板)→ 直接进入 §4。
|
|
126
|
+
|
|
127
|
+
> 该检测不阻断流程,仅在 overview.md 长期为空时提醒,避免全局契约缺位。
|
|
109
128
|
|
|
110
129
|
### 4. 【关键步骤】读取本地模板文件
|
|
111
130
|
|
|
@@ -138,75 +157,15 @@ openspec instructions proposal --change "<name>" --json
|
|
|
138
157
|
|
|
139
158
|
### 6. 分析需求完整性
|
|
140
159
|
|
|
141
|
-
|
|
142
|
-
- [ ] 是否有明确的问题描述?
|
|
143
|
-
- [ ] 是否有可衡量的目标?
|
|
144
|
-
- [ ] 是否涉及具体模块?
|
|
145
|
-
- [ ] 是否有时间/资源约束?
|
|
146
|
-
|
|
147
|
-
**【发现缺失时主动询问】**:
|
|
148
|
-
> "我发现以下信息还不够清晰,请补充:
|
|
149
|
-
> - [具体问题]
|
|
150
|
-
> 补充后我将重新生成文档。"
|
|
160
|
+
> 完整性检查(问题描述/目标/模块/约束 4 项)与缺失补充机制见 `./checklist.md`「§6 需求完整性检查」。发现缺失时主动询问用户补充。
|
|
151
161
|
|
|
152
162
|
### 7. 【交互引导】文档拆分模式选择
|
|
153
163
|
|
|
154
|
-
**❗
|
|
155
|
-
|
|
156
|
-
分析需求中的能力域数量后,使用 **AskUserQuestion** 工具向用户询问:
|
|
157
|
-
|
|
158
|
-
> "📋 **检测到需求包含以下能力域:**
|
|
159
|
-
> - [能力域列表]
|
|
160
|
-
>
|
|
161
|
-
> 🤔 **请选择文档拆分模式:**
|
|
162
|
-
>
|
|
163
|
-
> **A) 完整模式 (Full)** - 每个能力域独立文档
|
|
164
|
-
> - 目录结构:`specs/<capability>/spec.md`, `specs/<capability>/design.md`, `specs/<capability>/tasks.md`
|
|
165
|
-
> - 适合:大需求、多人协作、需要精细管控
|
|
166
|
-
>
|
|
167
|
-
> **B) 简化模式 (Simple)** - 单一文档
|
|
168
|
-
> - 目录结构:`spec.md`, `design.md`, `tasks.md`(合并所有能力域)
|
|
169
|
-
> - 适合:小需求、单人快速迭代
|
|
170
|
-
>
|
|
171
|
-
> **C) 自动判断** - 根据能力域数量自动选择
|
|
172
|
-
> - 单个能力域 → Simple 模式
|
|
173
|
-
> - 多个能力域 → Full 模式"
|
|
174
|
-
|
|
175
|
-
根据用户选择:
|
|
176
|
-
- 选择 A:设置 `mode: full`
|
|
177
|
-
- 选择 B:设置 `mode: simple`
|
|
178
|
-
- 选择 C:根据能力域数量自动判断并设置
|
|
179
|
-
|
|
180
|
-
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
164
|
+
**❗ 必须主动询问用户,不得默认选择**。Full / Simple / Auto 三种模式的目录结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§7 文档拆分模式选择」。根据用户选择设置 `mode: full | simple`(Auto 按能力域数量判断),记录到 proposal.md 的 YAML frontmatter。
|
|
181
165
|
|
|
182
166
|
### 8. 【交互引导】测试策略选择
|
|
183
167
|
|
|
184
|
-
**❗
|
|
185
|
-
|
|
186
|
-
使用 **AskUserQuestion** 工具向用户询问:
|
|
187
|
-
|
|
188
|
-
> "🧪 **请选择测试策略:**
|
|
189
|
-
>
|
|
190
|
-
> **A) 测试驱动 (TDD)** - 测试先行
|
|
191
|
-
> - 先生成测试任务,实现任务依赖测试任务
|
|
192
|
-
> - DAG: 测试骨架 → 实现代码 → 测试验证
|
|
193
|
-
> - 适合:核心业务逻辑、质量要求高
|
|
194
|
-
>
|
|
195
|
-
> **B) 实现优先 (Impl-First)** - 代码先行
|
|
196
|
-
> - 先生成实现任务,测试作为验证步骤
|
|
197
|
-
> - DAG: 实现代码 → 测试验证
|
|
198
|
-
> - 适合:UI 层、配置类、快速原型
|
|
199
|
-
>
|
|
200
|
-
> **C) 无测试 (None)** - 仅实现
|
|
201
|
-
> - 不生成测试任务,仅编译检查
|
|
202
|
-
> - 适合:简单配置、文档更新"
|
|
203
|
-
|
|
204
|
-
根据用户选择:
|
|
205
|
-
- 选择 A:设置 `test-strategy: tdd`
|
|
206
|
-
- 选择 B:设置 `test-strategy: impl-first`
|
|
207
|
-
- 选择 C:设置 `test-strategy: none`
|
|
208
|
-
|
|
209
|
-
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
168
|
+
**❗ 必须主动询问用户,不得默认选择**。TDD / Impl-First / None 三种策略的 DAG 结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§8 测试策略选择」。根据用户选择设置 `test-strategy: tdd | impl-first | none`,记录到 proposal.md 的 YAML frontmatter。
|
|
210
169
|
|
|
211
170
|
### 9. 创建 proposal.md
|
|
212
171
|
|
|
@@ -216,17 +175,7 @@ openspec instructions proposal --change "<name>" --json
|
|
|
216
175
|
|
|
217
176
|
### 10. 质量红线自检
|
|
218
177
|
|
|
219
|
-
|
|
220
|
-
- [ ] 文档结构完全符合 `openspec-templates/proposal.md` 模板
|
|
221
|
-
- [ ] 章节编号和命名正确(如 `## 1. 需求背景` 而非 `## Why`)
|
|
222
|
-
- [ ] 子章节结构正确(如 `### 1.1 现状问题`、`### 1.2 业务诉求`)
|
|
223
|
-
- [ ] 涉及模块使用 checkbox 格式(`- [ ] 模块A`)
|
|
224
|
-
- [ ] 依赖关系使用代码块图示
|
|
225
|
-
- [ ] 前置依赖使用 checkbox 格式
|
|
226
|
-
- [ ] 文档末尾包含质量红线检查清单
|
|
227
|
-
- [ ] 能力分解章节已明确(决定后续 specs 文件夹结构)
|
|
228
|
-
|
|
229
|
-
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|
|
178
|
+
> 写入文档前逐项确认,完整 8 项自检清单见 `./reference.md`「§10 质量红线自检清单」。如有任意一项未满足,重新生成对应章节,直至全部通过。
|
|
230
179
|
|
|
231
180
|
### 11. 确认文档并输出结果
|
|
232
181
|
|
|
@@ -255,13 +204,20 @@ openspec instructions proposal --change "<name>" --json
|
|
|
255
204
|
|
|
256
205
|
## Guardrails
|
|
257
206
|
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
- proposal.md
|
|
261
|
-
-
|
|
262
|
-
-
|
|
263
|
-
-
|
|
264
|
-
-
|
|
265
|
-
- 每次生成都提供文档摘要,等待用户确认后再继续
|
|
207
|
+
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
208
|
+
|
|
209
|
+
- **必须以 `openspec-templates/proposal.md` 为模板基准**,不得使用 `openspec instructions` 返回的简化 template。
|
|
210
|
+
- `context` 和 `rules` 是约束条件,**不得出现在生成的文档中**。
|
|
211
|
+
- proposal.md 聚焦【Why】,不写技术实现细节(留给 design.md),不写 API 细节(留给 specs)。
|
|
212
|
+
- **Capabilities 章节是关键**:决定后续 specs 文件夹结构。
|
|
213
|
+
- 文档写入后验证文件确实存在;每次生成都提供文档摘要,等待用户确认后再继续。
|
|
266
214
|
- **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx-apply` 执行。」
|
|
267
|
-
- **⛔
|
|
215
|
+
- **⛔ 单阶段原则**:完成 proposal.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-spec`,绝对禁止自动执行 spec/design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
216
|
+
- **⛔ Frontmatter 规范(L7)**:YAML frontmatter 中禁止写 `#` 注释(YAML 注释在 frontmatter 中可能导致解析问题)。如需说明,在 frontmatter 之前或之后用正文描述。
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 渐进披露
|
|
221
|
+
|
|
222
|
+
- Read `checklist.md` 仅在执行 propose 需要校验时 — 含阶段边界⛔(Propose 阶段约束)、§6 需求完整性检查、Guardrails ⛔ 强制项勾选表。
|
|
223
|
+
- Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§7 文档拆分模式(Full/Simple/Auto)、§8 测试策略(TDD/Impl-First/None)、§10 质量红线自检清单(8 项)。
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-propose 的阶段强制检查点与自检清单。仅在执行 propose 需要校验时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-propose — 检查清单(checklist)
|
|
6
|
+
|
|
7
|
+
> 执行 opsx-propose 时逐项校验。含阶段边界⛔、需求完整性检查、Guardrails ⛔ 强制项。
|
|
8
|
+
> 详细模板(telemetry 命令 / §7 模式说明 / §8 测试策略 / §10 质量红线自检清单)见 `./reference.md`。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 阶段边界⛔(Propose 阶段约束)
|
|
13
|
+
|
|
14
|
+
- [ ] ✅ 允许:创建/编辑 proposal.md 文档、读取代码/文档作为上下文分析
|
|
15
|
+
- [ ] ❌ 禁止:创建/修改任何代码文件、执行代码生成、运行测试
|
|
16
|
+
- [ ] ⛔ 单阶段原则:完成 proposal.md 后必须立即停止,等待用户主动触发下一阶段
|
|
17
|
+
- [ ] 即使用户提供代码作为上下文,只用于理解需求背景,不执行任何代码操作
|
|
18
|
+
- [ ] 代码实现引导用户使用 `/opsx-apply`
|
|
19
|
+
- [ ] ⛔ 完成本阶段后绝对禁止自动继续执行 spec/design/task 等后续阶段
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## §6 需求完整性检查
|
|
24
|
+
|
|
25
|
+
- [ ] 是否有明确的问题描述?
|
|
26
|
+
- [ ] 是否有可衡量的目标?
|
|
27
|
+
- [ ] 是否涉及具体模块?
|
|
28
|
+
- [ ] 是否有时间/资源约束?
|
|
29
|
+
- [ ] 发现缺失时主动询问用户补充("我发现以下信息还不够清晰,请补充...")
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## Guardrails ⛔ 强制项
|
|
34
|
+
|
|
35
|
+
- [ ] 必须以 `openspec-templates/proposal.md` 为模板基准,不得使用 `openspec instructions` 返回的简化 template
|
|
36
|
+
- [ ] `context` 和 `rules` 是约束条件,不得出现在生成的文档中
|
|
37
|
+
- [ ] proposal.md 聚焦【Why】,不写技术实现细节(留给 design.md)
|
|
38
|
+
- [ ] 不写 API 细节(留给 specs)
|
|
39
|
+
- [ ] Capabilities 章节是关键:决定后续 specs 文件夹结构
|
|
40
|
+
- [ ] 若跳过此文档,后续 specs 必须补齐影响范围
|
|
41
|
+
- [ ] 文档写入后验证文件确实存在
|
|
42
|
+
- [ ] 每次生成都提供文档摘要,等待用户确认后再继续
|
|
43
|
+
- [ ] ⛔ **阶段边界**:本阶段禁止执行任何代码创建/修改操作;用户要求处理代码时回复「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx-apply` 执行。」
|
|
44
|
+
- [ ] ⛔ **单阶段原则**:完成 proposal.md 后必须立即停止;仅提示用户下一步可运行 `/opsx-spec`,绝对禁止自动执行 spec/design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-propose 的详细模板:telemetry 命令、文档拆分模式、测试策略、质量红线自检清单。仅在需要参考详细模板时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-propose — 详细参考(reference)
|
|
6
|
+
|
|
7
|
+
> 本文件承载 opsx-propose 的重细节模板:telemetry 命令、§7 文档拆分模式说明、§8 测试策略说明、§10 质量红线自检清单。
|
|
8
|
+
> SKILL.md 保留入口骨架与指针;本文件为详细模板来源。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
|
+
|
|
14
|
+
> 阶段开始:`node skywalk-sdd/log.cjs start --command=propose --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`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="摘要"`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## §7 文档拆分模式选择
|
|
20
|
+
|
|
21
|
+
**❗ 必须主动询问用户,不得默认选择**
|
|
22
|
+
|
|
23
|
+
分析需求中的能力域数量后,使用 **AskUserQuestion** 工具向用户询问:
|
|
24
|
+
|
|
25
|
+
> "📋 **检测到需求包含以下能力域:**
|
|
26
|
+
> - [能力域列表]
|
|
27
|
+
>
|
|
28
|
+
> 🤔 **请选择文档拆分模式:**
|
|
29
|
+
>
|
|
30
|
+
> **A) 完整模式 (Full)** - 每个能力域独立文档
|
|
31
|
+
> - 目录结构:`specs/<capability>/spec.md`, `specs/<capability>/design.md`, `specs/<capability>/tasks.md`
|
|
32
|
+
> - 适合:大需求、多人协作、需要精细管控
|
|
33
|
+
>
|
|
34
|
+
> **B) 简化模式 (Simple)** - 单一文档
|
|
35
|
+
> - 目录结构:`spec.md`, `design.md`, `tasks.md`(合并所有能力域)
|
|
36
|
+
> - 适合:小需求、单人快速迭代
|
|
37
|
+
>
|
|
38
|
+
> **C) 自动判断** - 根据能力域数量自动选择
|
|
39
|
+
> - 单个能力域 → Simple 模式
|
|
40
|
+
> - 多个能力域 → Full 模式"
|
|
41
|
+
|
|
42
|
+
根据用户选择:
|
|
43
|
+
- 选择 A:设置 `mode: full`
|
|
44
|
+
- 选择 B:设置 `mode: simple`
|
|
45
|
+
- 选择 C:根据能力域数量自动判断并设置
|
|
46
|
+
|
|
47
|
+
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## §8 测试策略选择
|
|
52
|
+
|
|
53
|
+
**❗ 必须主动询问用户,不得默认选择**
|
|
54
|
+
|
|
55
|
+
使用 **AskUserQuestion** 工具向用户询问:
|
|
56
|
+
|
|
57
|
+
> "🧪 **请选择测试策略:**
|
|
58
|
+
>
|
|
59
|
+
> **A) 测试驱动 (TDD)** - 测试先行
|
|
60
|
+
> - 先生成测试任务,实现任务依赖测试任务
|
|
61
|
+
> - DAG: 测试骨架 → 实现代码 → 测试验证
|
|
62
|
+
> - 适合:核心业务逻辑、质量要求高
|
|
63
|
+
>
|
|
64
|
+
> **B) 实现优先 (Impl-First)** - 代码先行
|
|
65
|
+
> - 先生成实现任务,测试作为验证步骤
|
|
66
|
+
> - DAG: 实现代码 → 测试验证
|
|
67
|
+
> - 适合:UI 层、配置类、快速原型
|
|
68
|
+
>
|
|
69
|
+
> **C) 无测试 (None)** - 仅实现
|
|
70
|
+
> - 不生成测试任务,仅编译检查
|
|
71
|
+
> - 适合:简单配置、文档更新"
|
|
72
|
+
|
|
73
|
+
根据用户选择:
|
|
74
|
+
- 选择 A:设置 `test-strategy: tdd`
|
|
75
|
+
- 选择 B:设置 `test-strategy: impl-first`
|
|
76
|
+
- 选择 C:设置 `test-strategy: none`
|
|
77
|
+
|
|
78
|
+
**将用户选择记录到 proposal.md 的 YAML frontmatter 中。**
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## §10 质量红线自检清单
|
|
83
|
+
|
|
84
|
+
写入文档前,逐项确认:
|
|
85
|
+
- [ ] 文档结构完全符合 `openspec-templates/proposal.md` 模板
|
|
86
|
+
- [ ] 章节编号和命名正确(如 `## 1. 需求背景` 而非 `## Why`)
|
|
87
|
+
- [ ] 子章节结构正确(如 `### 1.1 现状问题`、`### 1.2 业务诉求`)
|
|
88
|
+
- [ ] 涉及模块使用 checkbox 格式(`- [ ] 模块A`)
|
|
89
|
+
- [ ] 依赖关系使用代码块图示
|
|
90
|
+
- [ ] 前置依赖使用 checkbox 格式
|
|
91
|
+
- [ ] 文档末尾包含质量红线检查清单
|
|
92
|
+
- [ ] 能力分解章节已明确(决定后续 specs 文件夹结构)
|
|
93
|
+
|
|
94
|
+
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|