@hunterzheng/kld-sdd 2.4.19
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 +275 -0
- package/bin/kld-sdd-init.js +24 -0
- package/index.js +13 -0
- package/lib/init.js +1124 -0
- package/lib/skills-bundle.js +30 -0
- package/package.json +48 -0
- package/skywalk-sdd/apply-worktree-finish.cjs +551 -0
- package/skywalk-sdd/index.cjs +2991 -0
- package/templates/ci/github-actions-sdd.yml +67 -0
- package/templates/ci/gitlab-ci-sdd.yml +44 -0
- package/templates/git-hooks/pre-commit-sdd-check.cjs +155 -0
- package/templates/git-hooks/pre-push-sdd-check.cjs +56 -0
- package/templates/hooks/claude/hooks/sdd-apply-gate.cjs +173 -0
- package/templates/hooks/claude/hooks/sdd-apply-test-gate.cjs +315 -0
- package/templates/hooks/claude/hooks/sdd-post-tool.cjs +146 -0
- package/templates/hooks/claude/hooks/sdd-pre-tool.cjs +41 -0
- package/templates/hooks/claude/hooks/sdd-prompt.cjs +88 -0
- package/templates/hooks/claude/hooks/sdd-skill-apply-gate.cjs +268 -0
- package/templates/hooks/claude/hooks/sdd-stop.cjs +108 -0
- package/templates/hooks/claude/settings.json +72 -0
- package/templates/openspec/design.md +290 -0
- package/templates/openspec/overview.md +143 -0
- package/templates/openspec/proposal.md +108 -0
- package/templates/openspec/spec.md +185 -0
- package/templates/openspec/tasks.md +287 -0
- package/templates/skills/kld-sdd/opsx-apply/SKILL.md +251 -0
- package/templates/skills/kld-sdd/opsx-apply/checklist.md +94 -0
- package/templates/skills/kld-sdd/opsx-apply/implementer-prompt.md +129 -0
- package/templates/skills/kld-sdd/opsx-apply/reference.md +335 -0
- package/templates/skills/kld-sdd/opsx-apply/worktree-setup.md +104 -0
- package/templates/skills/kld-sdd/opsx-archive/SKILL.md +162 -0
- package/templates/skills/kld-sdd/opsx-archive/checklist.md +33 -0
- package/templates/skills/kld-sdd/opsx-check/SKILL.md +197 -0
- package/templates/skills/kld-sdd/opsx-check/checklist.md +35 -0
- package/templates/skills/kld-sdd/opsx-design/SKILL.md +166 -0
- 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-explore/SKILL.md +104 -0
- package/templates/skills/kld-sdd/opsx-knowledge/SKILL.md +130 -0
- package/templates/skills/kld-sdd/opsx-knowledge/references/modules.md +26 -0
- package/templates/skills/kld-sdd/opsx-knowledge/scripts/config.json +39 -0
- package/templates/skills/kld-sdd/opsx-knowledge/scripts/retrieve.cjs +199 -0
- package/templates/skills/kld-sdd/opsx-propose/SKILL.md +201 -0
- 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 +168 -0
- 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 +199 -0
- 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 +143 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-propose
|
|
3
|
+
description: "业务意图文档技能 - 引导创建 proposal.md,定义变更的 Why 和上下文总览"
|
|
4
|
+
argument-hint: "[change-name] [上下文文件...]"
|
|
5
|
+
license: MIT
|
|
6
|
+
compatibility: Requires openspec CLI.
|
|
7
|
+
metadata:
|
|
8
|
+
author: sdd-team
|
|
9
|
+
version: "3.0"
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
- Edit
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
你是一个 SDD(Specification-Driven Development)业务意图文档专家。激活本技能后,你将引导用户创建符合质量红线标准的 **proposal.md** 文档。
|
|
18
|
+
|
|
19
|
+
> **⚠️ 阶段边界约束**
|
|
20
|
+
>
|
|
21
|
+
> 当前处于 **Propose(规划)阶段**:
|
|
22
|
+
> - ✅ **允许**:创建/编辑 proposal.md 文档、读取代码/文档作为上下文分析
|
|
23
|
+
> - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
|
|
24
|
+
> - ⛔ **单阶段原则**:完成 proposal.md 后**必须立即停止**,等待用户主动触发下一阶段
|
|
25
|
+
>
|
|
26
|
+
> 即使用户提供了代码作为上下文,也只用于理解需求背景,**不执行任何代码操作**。
|
|
27
|
+
> 代码实现请引导用户使用 `/opsx-apply` 命令。
|
|
28
|
+
> **完成本阶段后,绝对禁止自动继续执行 spec/design/task 等后续阶段。**
|
|
29
|
+
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
30
|
+
|
|
31
|
+
> **🖥️ 跨平台执行规则**
|
|
32
|
+
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
33
|
+
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
34
|
+
> - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
|
|
35
|
+
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
36
|
+
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 技能定位
|
|
41
|
+
|
|
42
|
+
**proposal.md** 是 SDD 四文档链的起点,聚焦回答:**为什么要做这个变更?**
|
|
43
|
+
|
|
44
|
+
| 维度 | 内容 |
|
|
45
|
+
|------|------|
|
|
46
|
+
| 核心问题 | Why - 为什么做 |
|
|
47
|
+
| 关键输出 | 业务目标、影响范围、约束条件、能力分解 |
|
|
48
|
+
| 下游依赖 | specs → design.md → tasks.md |
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 启动流程
|
|
53
|
+
|
|
54
|
+
### 1. 输入处理
|
|
55
|
+
|
|
56
|
+
当用户激活此 skill 时:
|
|
57
|
+
|
|
58
|
+
**若提供了变更名称/描述**:
|
|
59
|
+
- 解析为 kebab-case 名称(如 "add user authentication" → `add-user-auth`)
|
|
60
|
+
- 跳转到第 2 步
|
|
61
|
+
|
|
62
|
+
**若未提供任何输入**,使用 **AskUserQuestion** 询问:
|
|
63
|
+
> "请描述本次变更的业务需求:
|
|
64
|
+
> 1. 要解决什么问题?(现状痛点)
|
|
65
|
+
> 2. 达成什么目标?(期望结果)
|
|
66
|
+
> 3. 涉及哪些模块/系统?
|
|
67
|
+
> 4. 有什么约束条件?(时间/技术/资源)"
|
|
68
|
+
|
|
69
|
+
从描述中推导 kebab-case 名称。
|
|
70
|
+
|
|
71
|
+
**【澄清机制】若用户描述模糊,主动追问**:
|
|
72
|
+
- 若目标不明确:"请用一句话明确本次变更要达成的具体目标"
|
|
73
|
+
- 若影响范围不清:"请列出本次变更涉及的所有模块/服务"
|
|
74
|
+
- 若约束未提及:"是否有时间限制、技术约束或依赖前提?"
|
|
75
|
+
|
|
76
|
+
**重要**:未明确需求前不得继续。
|
|
77
|
+
|
|
78
|
+
### 2. 【上下文加载】识别并读取用户提供的文件
|
|
79
|
+
|
|
80
|
+
**自动识别上下文文件**:
|
|
81
|
+
若用户在命令中指定了文件路径(如 `/opsx-propose atp-calc ./需求.md ./算法逻辑.md`),
|
|
82
|
+
或在对话中附加/引用了文件,**必须自动读取这些文件**。
|
|
83
|
+
|
|
84
|
+
**上下文处理原则**:
|
|
85
|
+
- 需求文档 → 提取业务目标、用户场景、验收标准
|
|
86
|
+
- 代码文件 → 分析现有实现,识别修改点
|
|
87
|
+
- API 文档 → 了解接口约束、数据模型
|
|
88
|
+
|
|
89
|
+
**【可选】业务知识库检索**:
|
|
90
|
+
遇到不明 MM/CO 业务名词时,可调用 **opsx-knowledge** skill 查询 RAGFlow 知识库。
|
|
91
|
+
结果仅作 `📚 知识库建议`,不得写入 proposal 强制约束;查询失败时继续主流程。
|
|
92
|
+
|
|
93
|
+
### 3. 创建变更目录
|
|
94
|
+
|
|
95
|
+
```bash
|
|
96
|
+
openspec new change "<name>"
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
此命令在 `openspec/changes/<name>/` 创建变更目录和 `.openspec.yaml`。
|
|
100
|
+
|
|
101
|
+
**【交互引导】若变更已存在**:
|
|
102
|
+
- 询问用户:"变更 `<name>` 已存在,请选择:
|
|
103
|
+
- A. 覆盖原有变更(删除重建)
|
|
104
|
+
- B. 继续编辑现有变更
|
|
105
|
+
- C. 取消操作"
|
|
106
|
+
- 根据用户选择执行对应操作
|
|
107
|
+
|
|
108
|
+
### 4. 【关键步骤】读取本地模板文件
|
|
109
|
+
|
|
110
|
+
**必须先读取** `openspec-templates/proposal.md` 作为文档结构模板:
|
|
111
|
+
```
|
|
112
|
+
使用 Read 工具读取:openspec-templates/proposal.md
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
此模板定义了文档的完整结构,包括:
|
|
116
|
+
- 章节编号和命名
|
|
117
|
+
- 子章节结构(如 1.1 现状问题、1.2 业务诉求)
|
|
118
|
+
- 格式要求(checkbox、代码块、表格等)
|
|
119
|
+
- 质量红线检查清单
|
|
120
|
+
|
|
121
|
+
**【重要】不得使用 `openspec instructions` 返回的简化 template,必须以 `openspec-templates/proposal.md` 为准。**
|
|
122
|
+
|
|
123
|
+
### 5. 获取项目上下文(可选)
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
openspec instructions proposal --change "<name>" --json
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
解析返回的 JSON,仅获取:
|
|
130
|
+
- `context`:项目背景约束(**仅供参考,不要写入文档**)
|
|
131
|
+
- `rules`:文档编写规则(**仅供参考,不要写入文档**)
|
|
132
|
+
- `outputPath`:文档输出路径
|
|
133
|
+
- `dependencies`:前置依赖文件路径
|
|
134
|
+
|
|
135
|
+
**注意**:忽略返回的 `template` 字段,使用步骤 4 读取的本地模板。
|
|
136
|
+
|
|
137
|
+
### 6. 分析需求完整性
|
|
138
|
+
|
|
139
|
+
> 完整性检查(问题描述/目标/模块/约束 4 项)与缺失补充机制见 `./checklist.md`「§6 需求完整性检查」。发现缺失时主动询问用户补充。
|
|
140
|
+
|
|
141
|
+
### 7. 【交互引导】文档拆分模式选择
|
|
142
|
+
|
|
143
|
+
**❗ 必须主动询问用户,不得默认选择**。Full / Simple / Auto 三种模式的目录结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§7 文档拆分模式选择」。根据用户选择设置 `mode: full | simple`(Auto 按能力域数量判断),记录到 proposal.md 的 YAML frontmatter。
|
|
144
|
+
|
|
145
|
+
### 8. 【交互引导】测试策略选择
|
|
146
|
+
|
|
147
|
+
**❗ 必须主动询问用户,不得默认选择**。TDD / Impl-First / None 三种策略的 DAG 结构、适用场景与 AskUserQuestion 文案见 `./reference.md`「§8 测试策略选择」。根据用户选择设置 `test-strategy: tdd | impl-first | none`,记录到 proposal.md 的 YAML frontmatter。
|
|
148
|
+
|
|
149
|
+
### 9. 创建 proposal.md
|
|
150
|
+
|
|
151
|
+
**以 `openspec-templates/proposal.md` 的结构为骨架**,填充内容到 `outputPath`。
|
|
152
|
+
|
|
153
|
+
**【质量红线】生成文档必须严格遵循模板结构。**
|
|
154
|
+
|
|
155
|
+
### 10. 质量红线自检
|
|
156
|
+
|
|
157
|
+
> 写入文档前逐项确认,完整 8 项自检清单见 `./reference.md`「§10 质量红线自检清单」。如有任意一项未满足,重新生成对应章节,直至全部通过。
|
|
158
|
+
|
|
159
|
+
### 11. 确认文档并输出结果
|
|
160
|
+
|
|
161
|
+
生成文档后,向用户展示概要:
|
|
162
|
+
> "已生成 proposal.md 草案,概要如下:
|
|
163
|
+
> - 变更名称:[name]
|
|
164
|
+
> - 核心目标:[一句话总结]
|
|
165
|
+
> - 影响模块:[模块列表]
|
|
166
|
+
> - 能力域:[capability 列表]
|
|
167
|
+
>
|
|
168
|
+
> 请确认:
|
|
169
|
+
> - A. 确认无误,继续创建 specs
|
|
170
|
+
> - B. 需要修改 [具体章节]
|
|
171
|
+
> - C. 补充更多信息"
|
|
172
|
+
|
|
173
|
+
根据用户反馈:
|
|
174
|
+
- 选择 A:保存文档,提示下一步
|
|
175
|
+
- 选择 B/C:根据反馈修改文档
|
|
176
|
+
|
|
177
|
+
最终输出:
|
|
178
|
+
- 文档路径
|
|
179
|
+
- 内容摘要
|
|
180
|
+
- 下一步提示:"运行 `/opsx-spec` 创建技术契约文档 (specs/<capability>/spec.md)"
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## Guardrails
|
|
185
|
+
|
|
186
|
+
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
187
|
+
|
|
188
|
+
- **必须以 `openspec-templates/proposal.md` 为模板基准**,不得使用 `openspec instructions` 返回的简化 template。
|
|
189
|
+
- `context` 和 `rules` 是约束条件,**不得出现在生成的文档中**。
|
|
190
|
+
- proposal.md 聚焦【Why】,不写技术实现细节(留给 design.md),不写 API 细节(留给 specs)。
|
|
191
|
+
- **Capabilities 章节是关键**:决定后续 specs 文件夹结构。
|
|
192
|
+
- 文档写入后验证文件确实存在;每次生成都提供文档摘要,等待用户确认后再继续。
|
|
193
|
+
- **⛔ 阶段边界**:本阶段禁止执行任何代码创建/修改操作。若用户要求处理代码,回复:「当前处于 Propose 阶段,代码操作请在完成文档后使用 `/opsx-apply` 执行。」
|
|
194
|
+
- **⛔ 单阶段原则**:完成 proposal.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-spec`,绝对禁止自动执行 spec/design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
195
|
+
|
|
196
|
+
---
|
|
197
|
+
|
|
198
|
+
## 渐进披露
|
|
199
|
+
|
|
200
|
+
- Read `checklist.md` 仅在执行 propose 需要校验时 — 含阶段边界⛔(Propose 阶段约束)、§6 需求完整性检查、Guardrails ⛔ 强制项勾选表。
|
|
201
|
+
- 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
|
+
**如有任意一项未满足,重新生成对应章节,直至全部通过。**
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: opsx-spec
|
|
3
|
+
description: "技术契约文档技能 - 为每个能力创建 spec.md,定义业务场景与技术规范"
|
|
4
|
+
argument-hint: "[change-name] [上下文文件...]"
|
|
5
|
+
license: MIT
|
|
6
|
+
compatibility: Requires openspec CLI.
|
|
7
|
+
metadata:
|
|
8
|
+
author: sdd-team
|
|
9
|
+
version: "3.0"
|
|
10
|
+
allowed-tools:
|
|
11
|
+
- Bash
|
|
12
|
+
- Read
|
|
13
|
+
- Write
|
|
14
|
+
- Edit
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
你是一个 SDD(Specification-Driven Development)技术契约专家。激活本技能后,你将引导用户为每个 Capability 创建 **spec.md** 文档。
|
|
18
|
+
|
|
19
|
+
> **⚠️ 阶段边界约束**
|
|
20
|
+
>
|
|
21
|
+
> 当前处于 **Spec(契约)阶段**:
|
|
22
|
+
> - ✅ **允许**:创建/编辑 spec.md 文档、读取代码/文档作为上下文分析
|
|
23
|
+
> - ❌ **禁止**:创建/修改任何代码文件、执行代码生成、运行测试
|
|
24
|
+
> - ⛔ **单阶段原则**:完成 spec.md 后**必须立即停止**,等待用户主动触发下一阶段
|
|
25
|
+
>
|
|
26
|
+
> 即使用户提供了代码作为上下文,也只用于分析现有实现,**不执行任何代码操作**。
|
|
27
|
+
> 代码实现将在 `/opsx-apply` 阶段进行。
|
|
28
|
+
> **完成本阶段后,绝对禁止自动继续执行 design/task 等后续阶段。**
|
|
29
|
+
> 阶段边界自检见 `./checklist.md`「阶段边界⛔」。
|
|
30
|
+
|
|
31
|
+
> **🖥️ 跨平台执行规则**
|
|
32
|
+
> - 先确认当前终端工作目录是项目根目录;若不是,先 `cd` 到项目根目录。
|
|
33
|
+
> - Telemetry 命令默认使用 `--project=.`,兼容 Windows、macOS、Linux。
|
|
34
|
+
> - 在 Windows Bash / Git Bash / Claude Bash 中,禁止裸写 Windows 反斜杠绝对路径(如 `D:\project\demo`);如必须使用绝对路径,请写成正斜杠路径或加引号。
|
|
35
|
+
> - 不要省略 `--source=opsx-command` 与 `--session-id=<会话ID>`。
|
|
36
|
+
> **📊 Telemetry(必做,不得跳过)** — 阶段开始 / 阶段结束**命令模板**见 `./reference.md`「📊 Telemetry 命令模板」。
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## 技能定位
|
|
41
|
+
|
|
42
|
+
| 维度 | 内容 |
|
|
43
|
+
|------|------|
|
|
44
|
+
| 核心问题 | What - 具体做什么(业务场景 + 技术规范) |
|
|
45
|
+
| 关键输出 | specs/<capability>/spec.md |
|
|
46
|
+
| 上游依赖 | proposal.md(能力列表) |
|
|
47
|
+
| 下游依赖 | design.md → tasks.md |
|
|
48
|
+
|
|
49
|
+
**【文件结构】**:每个 capability 生成一个独立的 spec 文件:
|
|
50
|
+
```
|
|
51
|
+
openspec/changes/<name>/
|
|
52
|
+
├── proposal.md
|
|
53
|
+
├── specs/
|
|
54
|
+
│ ├── user-auth/
|
|
55
|
+
│ │ └── spec.md # capability 1 的规格
|
|
56
|
+
│ ├── data-export/
|
|
57
|
+
│ │ └── spec.md # capability 2 的规格
|
|
58
|
+
│ └── ...
|
|
59
|
+
├── design.md
|
|
60
|
+
└── tasks.md
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 启动流程
|
|
66
|
+
|
|
67
|
+
### 1. 【交互引导】确认变更名称
|
|
68
|
+
|
|
69
|
+
若未提供,列出当前所有变更供用户选择:
|
|
70
|
+
```bash
|
|
71
|
+
openspec list
|
|
72
|
+
```
|
|
73
|
+
若变更不存在,引导用户先运行 `/opsx-propose <name>`。
|
|
74
|
+
|
|
75
|
+
### 2. 【交互引导】确认 Capability
|
|
76
|
+
|
|
77
|
+
读取 `proposal.md` 中定义的 Capabilities 列表:
|
|
78
|
+
|
|
79
|
+
使用 **AskUserQuestion** 让用户选择要编写规格的 Capability:
|
|
80
|
+
> "📋 **proposal.md 中定义的能力域:**
|
|
81
|
+
> - A. `user-auth` - 用户认证
|
|
82
|
+
> - B. `data-export` - 数据导出
|
|
83
|
+
> - C. 全部(按顺序逐个创建)
|
|
84
|
+
>
|
|
85
|
+
> 请选择要为哪个 Capability 创建 spec.md:"
|
|
86
|
+
|
|
87
|
+
### 3. 【上下文加载】识别并读取用户提供的文件
|
|
88
|
+
|
|
89
|
+
**自动识别上下文文件**:若用户在命令中指定了文件路径,或在对话中附加/引用了文件,**必须自动读取这些文件**。
|
|
90
|
+
|
|
91
|
+
> 上下文类型(需求文档 / 代码文件 / API 文档)与用途见 `./reference.md`「§3 上下文类型与用途」。
|
|
92
|
+
|
|
93
|
+
**【可选】业务知识库检索**:
|
|
94
|
+
术语含义不清且可能影响 spec 准确性时,可调用 **opsx-knowledge** skill。
|
|
95
|
+
知识库结果仅供参考,spec 契约以用户确认和 proposal 为准;失败时不阻塞。
|
|
96
|
+
|
|
97
|
+
### 4. 【关键步骤】读取本地模板文件
|
|
98
|
+
|
|
99
|
+
**必须先读取** `openspec-templates/spec.md` 作为文档结构模板:
|
|
100
|
+
```
|
|
101
|
+
使用 Read 工具读取:openspec-templates/spec.md
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
**【重要】不得使用 `openspec instructions` 返回的简化 template,必须以 `openspec-templates/spec.md` 为准。**
|
|
105
|
+
|
|
106
|
+
### 5. 渐进式上下文加载
|
|
107
|
+
|
|
108
|
+
```
|
|
109
|
+
第 1 层:全局基线
|
|
110
|
+
→ openspec/specs/overview.md
|
|
111
|
+
|
|
112
|
+
第 2 层:宏观背景
|
|
113
|
+
→ changes/<name>/proposal.md
|
|
114
|
+
|
|
115
|
+
第 3 层:当前 Capability 上下文
|
|
116
|
+
→ 已有的 spec.md(若为增量修改)
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
### 6. 创建 spec.md
|
|
120
|
+
|
|
121
|
+
**以 `openspec-templates/spec.md` 的结构为骨架**,填充内容。
|
|
122
|
+
|
|
123
|
+
**输出路径**:`changes/<name>/specs/<capability>/spec.md`
|
|
124
|
+
|
|
125
|
+
**【质量红线】需求项格式要求**:
|
|
126
|
+
- 需求项使用 `####`(4个#)
|
|
127
|
+
- 场景使用 `#####`(5个#)
|
|
128
|
+
|
|
129
|
+
### 7. 质量红线自检
|
|
130
|
+
|
|
131
|
+
> 写入文档前逐项确认,完整 7 项自检清单见 `./checklist.md`「§7 质量红线自检」。自检完成后**必须**输出结构化自检报告(模板见 `./reference.md`「§7 质量自检报告模板」),未通过项自动修复后重新输出,直至全部 ✅。
|
|
132
|
+
|
|
133
|
+
### 8. 确认文档并输出结果
|
|
134
|
+
|
|
135
|
+
生成文档后,向用户展示概要:
|
|
136
|
+
> "已生成 spec.md,概要如下:
|
|
137
|
+
> - Capability:[name]
|
|
138
|
+
> - 需求项数量:[N]
|
|
139
|
+
> - 场景数量:[M]
|
|
140
|
+
>
|
|
141
|
+
> 请确认:
|
|
142
|
+
> - A. 确认无误,继续下一个 Capability 的 spec / 进入 design
|
|
143
|
+
> - B. 需要修改
|
|
144
|
+
> - C. 补充更多信息"
|
|
145
|
+
|
|
146
|
+
最终输出:
|
|
147
|
+
- 文档路径
|
|
148
|
+
- 下一步提示:"运行 `/opsx-design <name> <capability>` 创建技术设计文档"
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Guardrails
|
|
153
|
+
|
|
154
|
+
> 完整 ⛔ 强制项勾选清单见 `./checklist.md`「Guardrails ⛔ 强制项」。核心红线:
|
|
155
|
+
|
|
156
|
+
- **必须以 `openspec-templates/spec.md` 为模板基准**。
|
|
157
|
+
- spec.md 聚焦【What】,不写 How(留给 design.md)。
|
|
158
|
+
- **需求项格式必须正确**:`####` 需求项、`#####` 场景;每个需求项必须有清晰的验收标准。
|
|
159
|
+
- 技术契约必须可执行、无歧义。
|
|
160
|
+
- **⛔ 阶段边界**:禁止执行任何代码创建/修改操作。
|
|
161
|
+
- **⛔ 单阶段原则**:完成 spec.md 后必须立即停止。仅提示用户下一步可运行 `/opsx-design`,绝对禁止自动执行 design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## 渐进披露
|
|
166
|
+
|
|
167
|
+
- Read `checklist.md` 仅在执行 spec 需要校验时 — 含阶段边界⛔(Spec 阶段约束)、§7 质量红线自检(7 项)、Guardrails ⛔ 强制项勾选表。
|
|
168
|
+
- Read `reference.md` 仅在需要参考详细模板时 — 含 📊 Telemetry 命令模板(start/end)、§3 上下文类型与用途表、§7 质量自检报告模板(结构化表格)。
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-spec 的阶段强制检查点与自检清单。仅在执行 spec 需要校验时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-spec — 检查清单(checklist)
|
|
6
|
+
|
|
7
|
+
> 执行 opsx-spec 时逐项校验。含阶段边界⛔、§7 质量红线自检、Guardrails ⛔ 强制项。
|
|
8
|
+
> 详细模板(telemetry 命令 / §3 上下文类型表 / §7 质量自检报告模板)见 `./reference.md`。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 阶段边界⛔(Spec 阶段约束)
|
|
13
|
+
|
|
14
|
+
- [ ] ✅ 允许:创建/编辑 spec.md 文档、读取代码/文档作为上下文分析
|
|
15
|
+
- [ ] ❌ 禁止:创建/修改任何代码文件、执行代码生成、运行测试
|
|
16
|
+
- [ ] ⛔ 单阶段原则:完成 spec.md 后必须立即停止,等待用户主动触发下一阶段
|
|
17
|
+
- [ ] 即使用户提供代码作为上下文,只用于分析现有实现,不执行任何代码操作
|
|
18
|
+
- [ ] 代码实现将在 `/opsx-apply` 阶段进行
|
|
19
|
+
- [ ] ⛔ 完成本阶段后绝对禁止自动继续执行 design/task 等后续阶段
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## §7 质量红线自检
|
|
24
|
+
|
|
25
|
+
写入文档前,逐项确认:
|
|
26
|
+
- [ ] 文档结构完全符合 `openspec-templates/spec.md` 模板
|
|
27
|
+
- [ ] 需求项格式正确(`#### 需求项:`,4个#)
|
|
28
|
+
- [ ] 场景格式正确(`##### 场景:`,5个#)
|
|
29
|
+
- [ ] 每个需求项都有验收标准
|
|
30
|
+
- [ ] 技术契约章节完整(数据模型、接口契约)
|
|
31
|
+
- [ ] 文档末尾包含质量红线检查清单
|
|
32
|
+
- [ ] 100% 覆盖 proposal.md 中该 Capability 的描述
|
|
33
|
+
|
|
34
|
+
**如有任意一项未满足,重新生成对应章节,直至全部通过。** 自检完成后必须输出结构化自检报告(模板见 `./reference.md`「§7 质量自检报告模板」),未通过项自动修复后重新输出。
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Guardrails ⛔ 强制项
|
|
39
|
+
|
|
40
|
+
- [ ] 必须以 `openspec-templates/spec.md` 为模板基准
|
|
41
|
+
- [ ] spec.md 聚焦【What】,不写 How(留给 design.md)
|
|
42
|
+
- [ ] **需求项格式必须正确**:`####` 需求项、`#####` 场景
|
|
43
|
+
- [ ] 每个需求项必须有清晰的验收标准
|
|
44
|
+
- [ ] 技术契约必须可执行、无歧义
|
|
45
|
+
- [ ] ⛔ **阶段边界**:禁止执行任何代码创建/修改操作
|
|
46
|
+
- [ ] ⛔ **单阶段原则**:完成 spec.md 后必须立即停止;仅提示用户下一步可运行 `/opsx-design`,绝对禁止自动执行 design/task 等后续阶段。每个阶段必须由用户主动触发。
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: opsx-spec 的详细模板:telemetry 命令、上下文类型表、质量自检报告模板。仅在需要参考详细模板时读取。
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# opsx-spec — 详细参考(reference)
|
|
6
|
+
|
|
7
|
+
> 本文件承载 opsx-spec 的重细节模板:telemetry 命令、§3 上下文类型表、§7 质量自检报告模板。
|
|
8
|
+
> SKILL.md 保留入口骨架与指针;本文件为详细模板来源。
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## 📊 Telemetry 命令模板(必做,不得跳过)
|
|
13
|
+
|
|
14
|
+
> 阶段开始:`node skywalk-sdd/log.cjs start --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID>`(保存 event_id)
|
|
15
|
+
> 阶段结束:`node skywalk-sdd/log.cjs end --event-id=<event_id> --command=spec --project=. --change=<变更名称> --agent=<Agent类型> --source=opsx-command --session-id=<会话ID> --result=success|failure --summary="摘要"`
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## §3 上下文类型与用途
|
|
20
|
+
|
|
21
|
+
| 上下文类型 | 用途 | 如何融入 spec |
|
|
22
|
+
|------------|------|--------------|
|
|
23
|
+
| 需求文档 | 提取验收标准、用户故事 | 转化为需求项和场景 |
|
|
24
|
+
| 代码文件 | 了解现有实现约束 | 纳入技术契约和约束条件 |
|
|
25
|
+
| API 文档 | 接口规范参考 | 对齐数据契约和接口格式 |
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## §7 质量自检报告模板
|
|
30
|
+
|
|
31
|
+
自检完成后,**必须**向用户展示结构化的自检报告:
|
|
32
|
+
|
|
33
|
+
> "### 质量自检结果
|
|
34
|
+
>
|
|
35
|
+
> | 检查项 | 状态 | 说明 |
|
|
36
|
+
> |--------|------|------|
|
|
37
|
+
> | 文档结构符合模板 | ✅/❌ | |
|
|
38
|
+
> | 需求项格式正确(4个#) | ✅/❌ | 共 N 个需求项 |
|
|
39
|
+
> | 场景格式正确(5个#) | ✅/❌ | 共 M 个场景 |
|
|
40
|
+
> | 每个需求项有验收标准 | ✅/❌ | |
|
|
41
|
+
> | 技术契约章节完整 | ✅/❌ | |
|
|
42
|
+
> | 质量红线检查清单 | ✅/❌ | |
|
|
43
|
+
> | 覆盖 proposal.md 描述 | ✅/❌ | |
|
|
44
|
+
> | 使用「必须」强制要求 | ✅/⚠️ | |
|
|
45
|
+
> | 技术选型包含版本 | ✅/⚠️ | |
|
|
46
|
+
>
|
|
47
|
+
> **结论**:全部通过 ✅ / 存在问题需修复 ❌"
|
|
48
|
+
|
|
49
|
+
**未通过项处理**:若有 ❌ 项,自动修复后重新输出报告,直至全部 ✅。
|