openspec-sdd-e2e-kit 0.1.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.
Files changed (38) hide show
  1. package/README.md +63 -0
  2. package/bin/sdd-e2e-kit.mjs +53 -0
  3. package/kit/.codex/skills/feature-to-e2e/SKILL.md +188 -0
  4. package/kit/.codex/skills/feature-to-e2e/agents/openai.yaml +4 -0
  5. package/kit/.codex/skills/openspec-apply-change/SKILL.md +180 -0
  6. package/kit/.codex/skills/openspec-archive-change/SKILL.md +157 -0
  7. package/kit/.codex/skills/openspec-continue-change/SKILL.md +136 -0
  8. package/kit/.codex/skills/openspec-explore/SKILL.md +292 -0
  9. package/kit/.codex/skills/openspec-full-spec-discovery/SKILL.md +356 -0
  10. package/kit/.codex/skills/openspec-full-spec-discovery/references/backlog-row-to-main-spec.md +447 -0
  11. package/kit/.codex/skills/openspec-new-change/SKILL.md +92 -0
  12. package/kit/.codex/skills/openspec-propose/SKILL.md +132 -0
  13. package/kit/.codex/skills/spec-to-gherkin/SKILL.md +686 -0
  14. package/kit/SDD_E2E_FLOW.md +268 -0
  15. package/kit/manifest.json +78 -0
  16. package/kit/openspec/config.yaml +18 -0
  17. package/kit/openspec/schemas/sdd-e2e/schema.yaml +128 -0
  18. package/kit/openspec/schemas/sdd-e2e/templates/acceptance-coverage.md +9 -0
  19. package/kit/openspec/schemas/sdd-e2e/templates/design.md +29 -0
  20. package/kit/openspec/schemas/sdd-e2e/templates/feature.feature +13 -0
  21. package/kit/openspec/schemas/sdd-e2e/templates/proposal.md +23 -0
  22. package/kit/openspec/schemas/sdd-e2e/templates/spec.md +21 -0
  23. package/kit/openspec/schemas/sdd-e2e/templates/tasks.md +16 -0
  24. package/kit/openspec/schemas/sdd-e2e/templates/test-cases.md +35 -0
  25. package/kit/openspec/schemas/sdd-e2e.yaml +160 -0
  26. package/kit/openspec/sdd-e2e-flow.md +290 -0
  27. package/kit/openspec/sdd-e2e-maintenance.md +98 -0
  28. package/kit/scripts/sdd/check-report.mjs +34 -0
  29. package/kit/scripts/sdd/lib.mjs +290 -0
  30. package/kit/scripts/sdd/lint-features.mjs +60 -0
  31. package/kit/scripts/sdd/lint-tasks.mjs +41 -0
  32. package/kit/scripts/sdd/self-test.mjs +185 -0
  33. package/kit/scripts/sdd/summarize-acceptance.mjs +41 -0
  34. package/package.json +19 -0
  35. package/src/check.mjs +86 -0
  36. package/src/diff.mjs +101 -0
  37. package/src/install.mjs +159 -0
  38. package/src/lib.mjs +221 -0
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: openspec-continue-change
3
+ description: 继续推进一个 OpenSpec 变更,创建下一个 artifact。适用于用户想继续某个变更、生成下一份 artifact 或推进当前工作流时。
4
+ license: MIT
5
+ compatibility: 需要 openspec CLI。
6
+ metadata:
7
+ author: openspec
8
+ version: "1.0"
9
+ generatedBy: "1.3.1"
10
+ projectOverlay: "sdd-e2e"
11
+ ---
12
+
13
+ 继续处理一个变更,并创建下一个 artifact。
14
+
15
+ **输入**:可以指定变更名称。如果未指定,先尝试从对话上下文推断;如果含糊或存在歧义,必须让用户从可用变更中选择。
16
+
17
+ **步骤**
18
+
19
+ 1. **如果未提供变更名称,让用户选择**
20
+
21
+ 运行 `openspec list --json` 获取可用变更,按最近修改时间排序。然后使用 **AskUserQuestion tool** 让用户选择要继续处理的变更。
22
+
23
+ 展示最近修改的前 3-4 个变更作为选项,包含:
24
+ - 变更名称
25
+ - Schema(如果存在 `schema` 字段则使用该值,否则显示 `"spec-driven"`)
26
+ - 状态,例如 `"0/5 tasks"`、`"complete"`、`"no tasks"`
27
+ - 最近修改时间(来自 `lastModified` 字段)
28
+
29
+ 将最近修改的变更标记为 "(Recommended)",因为它最可能是用户想继续的对象。
30
+
31
+ **重要**:不要猜测或自动选择变更,始终让用户选择。
32
+
33
+ 2. **检查当前状态**
34
+ ```bash
35
+ openspec status --change "<name>" --json
36
+ ```
37
+ 解析 JSON 以理解当前状态。响应包含:
38
+ - `schemaName`:当前使用的工作流 schema,例如 `"spec-driven"`
39
+ - `artifacts`:artifact 数组,每个 artifact 有状态(`"done"`、`"ready"`、`"blocked"`)
40
+ - `isComplete`:布尔值,表示所有 artifact 是否已完成
41
+
42
+ 如果 `openspec/changes/<name>/.openspec.yaml` 声明 `schema: sdd-e2e`,同时读取 `openspec/schemas/sdd-e2e/schema.yaml` 和 `openspec/sdd-e2e-flow.md`,并按项目级生命周期理解 artifact 顺序:proposal -> specs -> features -> test-cases -> design -> tasks -> phase acceptance -> final acceptance -> archive。
43
+
44
+ 3. **根据状态执行**
45
+
46
+ ---
47
+
48
+ **如果所有 artifact 都已完成(`isComplete: true`)**:
49
+ - 告知用户已经完成
50
+ - 展示最终状态,包括所使用的 schema
51
+ - 如果是 `schema: sdd-e2e`,明确说明:OpenSpec artifact 已完成不等于 SDD final acceptance 已通过;归档前仍需 `pnpm sdd:acceptance <name>` 通过
52
+ - 建议:"所有 artifact 已创建,可以开始实现该变更,或在验收通过后归档。"
53
+ - 停止
54
+
55
+ ---
56
+
57
+ **如果存在可创建的 artifact**(status 中有 `status: "ready"` 的 artifact):
58
+ - 从 status 输出中选择第一个 `status: "ready"` 的 artifact
59
+ - 获取创建说明:
60
+ ```bash
61
+ openspec instructions <artifact-id> --change "<name>" --json
62
+ ```
63
+ - 解析 JSON。关键字段包括:
64
+ - `context`:项目背景(给你的约束,不要写入输出文件)
65
+ - `rules`:artifact 级规则(给你的约束,不要写入输出文件)
66
+ - `template`:输出文件应使用的结构
67
+ - `instruction`:schema 指南
68
+ - `outputPath`:应写入的位置
69
+ - `dependencies`:需要读取的已完成依赖 artifact
70
+ - **创建 artifact 文件**:
71
+ - 读取所有已完成依赖文件作为上下文
72
+ - 使用 `template` 作为结构,并填充各节
73
+ - 写作时遵守 `context` 和 `rules`,但不要把它们复制进文件
74
+ - 写入 instructions 指定的输出路径
75
+ - 展示创建了什么,以及现在解锁了什么
76
+ - 对 `schema: sdd-e2e`,如果下一个 ready artifact 是 `final-acceptance`,但 tasks 尚未全部完成或缺少 phase report,不要提前生成 `acceptance-coverage.md`;提示先进入 apply 阶段
77
+ - 创建一个 artifact 后停止
78
+
79
+ ---
80
+
81
+ **如果没有 artifact ready(全部 blocked)**:
82
+ - 这在合法 schema 中不应该发生
83
+ - 展示状态,并建议检查配置或依赖问题
84
+
85
+ 4. **创建 artifact 后展示进度**
86
+ ```bash
87
+ openspec status --change "<name>"
88
+ ```
89
+
90
+ **输出**
91
+
92
+ 每次调用后展示:
93
+ - 本次创建了哪个 artifact
94
+ - 当前使用的 schema 工作流
95
+ - 当前进度(N/M 已完成)
96
+ - 现在解锁了哪些 artifact
97
+ - 在进入下一个 artifact 前,是否已创建或建议创建项目验证 artifact
98
+ - 提示语:"要继续的话,直接让我继续,或告诉我下一步怎么做。"
99
+
100
+ **Artifact 创建准则**
101
+
102
+ artifact 类型及其用途由 schema 决定。使用 instructions 输出中的 `instruction` 字段来判断应该创建什么。
103
+
104
+ 常见 artifact 模式:
105
+
106
+ **spec-driven schema**(proposal -> specs -> design -> tasks):
107
+ - **proposal.md**:如果上下文不清楚,询问用户。填写 Why、What Changes、Capabilities、Impact。
108
+ - Capabilities 部分很关键;其中列出的每个 capability 都需要对应 spec 文件。
109
+ - **specs/<capability>/spec.md**:为 proposal 的 Capabilities 中列出的每个 capability 创建一个 spec(使用 capability 名称,而不是 change 名称)。
110
+ - **specs 完成后的项目验证扩展**:当项目工作流需要 phase 级验证时,在 design/tasks 前使用 `spec-to-gherkin` 从已完成 specs 生成 `.feature` 文件。Scenario 必须包含标签:`@phase:*`、`@validation:*`、`@req:*`。
111
+ - **design.md**:记录技术决策、架构和实现方案。
112
+ - **tasks.md**:拆解为带 checkbox 的实现任务。如果存在 feature 文件,应按 `@phase:*` 中使用的 phase id 分组,并在每个 phase 末尾加入验证任务。
113
+
114
+ **sdd-e2e schema**(proposal -> specs -> features -> test-cases -> design -> tasks -> phase acceptance -> final acceptance -> archive):
115
+ - **features**:specs 完成后立即生成,写入 `specs/**/features/*.feature`,并同步更新 `test-cases.md`。
116
+ - **test-cases.md**:features 完成后生成,作为 coverage matrix 和 phase validation plan。
117
+ - **design.md**:必须参考 feature 的 phase、优先级、边界标签和 Spec Gap。
118
+ - **tasks.md**:必须按 feature 中的 `@phase:*` 分组;每个 phase 必须包含 `Covers: @phase:<id>`、实现任务和 Acceptance 验证任务。
119
+ - **final-acceptance**:只在 phase implementation 和 phase reports 完成后生成;不要在 propose/continue 阶段提前创建空报告。
120
+ - 创建或更新 features/tasks 后,运行 `pnpm sdd:lint-features <change>` 和 `pnpm sdd:lint-tasks <change>`。
121
+
122
+ 对于其他 schema,遵循 CLI 输出中的 `instruction` 字段。
123
+
124
+ **约束**
125
+ - 每次调用只创建一个 artifact
126
+ - 创建新 artifact 前必须读取依赖 artifact
127
+ - 不要跳过 artifact,也不要乱序创建
128
+ - 如果上下文不清楚,创建前询问用户
129
+ - 写入后确认 artifact 文件存在,再认为进度完成
130
+ - 如果 feature 文件存在,tasks 中不要发明新的 phase id;复用 `@phase:*` 中已有 id,或明确同时更新 feature 标签和 tasks
131
+ - 如果是 `schema: sdd-e2e`,feature 和 tasks lint 未通过时不要继续进入实现
132
+ - 使用 schema 的 artifact 顺序,不要假设固定 artifact 名称
133
+ - 对 `schema: sdd-e2e`,OpenSpec `status.isComplete` 只表示文件存在;SDD 语义完成以 `pnpm sdd:phase` 和 `pnpm sdd:acceptance` 为准
134
+ - **重要**:`context` 和 `rules` 是给你的约束,不是文件内容
135
+ - 不要把 `<context>`、`<rules>`、`<project_context>` 块复制到 artifact 文件中
136
+ - 它们只指导你如何写,绝不能出现在最终输出中
@@ -0,0 +1,292 @@
1
+ ---
2
+ name: openspec-explore
3
+ description: 进入 OpenSpec 探索模式,作为需求、设计和实现前后的思考伙伴。适用于用户想在变更前或变更中梳理想法、调查问题、澄清需求时。
4
+ license: MIT
5
+ compatibility: 需要 openspec CLI。
6
+ metadata:
7
+ author: openspec
8
+ version: "1.0"
9
+ generatedBy: "1.3.1"
10
+ projectOverlay: "sdd-e2e"
11
+ ---
12
+
13
+ 进入探索模式。深入思考,自由可视化,顺着对话自然推进。
14
+
15
+ **重要:探索模式用于思考,不用于实现。** 你可以读文件、搜索代码、调查代码库,但绝不能编写应用代码或实现功能。如果用户要求实现,提醒他们先退出探索模式并创建变更 proposal。你可以在用户要求时创建 OpenSpec artifact(proposal、design、specs 等),因为这是记录思考,不是实现功能。
16
+
17
+ **这是一种工作姿态,不是固定流程。** 没有固定步骤、强制顺序或必需输出。你是帮助用户探索问题的思考伙伴。
18
+
19
+ ---
20
+
21
+ ## 工作姿态
22
+
23
+ - **保持好奇,不急于下结论**:自然提出问题,不机械套流程
24
+ - **打开思路,而不是审问**:给出多个值得考虑的方向,让用户选择有共鸣的路径
25
+ - **善用可视化**:在有帮助时使用 ASCII 图解释系统、状态和关系
26
+ - **自适应**:跟随有价值的线索,在新信息出现时调整方向
27
+ - **有耐心**:不要急着收敛,让问题形状自然浮现
28
+ - **落地到真实代码**:相关时调查实际代码库,不只做抽象讨论
29
+
30
+ ---
31
+
32
+ ## 你可以做什么
33
+
34
+ 根据用户带来的问题,你可以:
35
+
36
+ **探索问题空间**
37
+ - 提出自然产生的澄清问题
38
+ - 挑战假设
39
+ - 重新表述问题
40
+ - 寻找类比
41
+
42
+ **调查代码库**
43
+ - 梳理相关架构
44
+ - 找到集成点
45
+ - 识别已有模式
46
+ - 暴露隐藏复杂度
47
+
48
+ **比较方案**
49
+ - 发散多个方案
50
+ - 做取舍表
51
+ - 画出 tradeoff
52
+ - 在用户询问时给出推荐路径
53
+
54
+ **可视化**
55
+ ```text
56
+ ┌─────────────────────────────────────────┐
57
+ │ 使用 ASCII 图辅助理解 │
58
+ ├─────────────────────────────────────────┤
59
+ │ │
60
+ │ ┌────────┐ ┌────────┐ │
61
+ │ │ State │────────▶│ State │ │
62
+ │ │ A │ │ B │ │
63
+ │ └────────┘ └────────┘ │
64
+ │ │
65
+ │ 系统图、状态机、数据流、架构草图、 │
66
+ │ 依赖图、方案对比表 │
67
+ │ │
68
+ └─────────────────────────────────────────┘
69
+ ```
70
+
71
+ **暴露风险和未知**
72
+ - 指出可能出错的地方
73
+ - 找出理解缺口
74
+ - 建议 spike 或调查任务
75
+
76
+ ---
77
+
78
+ ## OpenSpec 感知
79
+
80
+ 你理解 OpenSpec 系统。自然使用它,不要强行套用。
81
+
82
+ 本项目已经接入 project-local `sdd-e2e` schema,入口为 `openspec/schemas/sdd-e2e/schema.yaml`。当探索内容涉及 UI 行为、交互状态、异步请求、配置表单、发布流程、跨视图同步或 phase E2E 验收时,后续形式化 change 应优先使用 `schema: sdd-e2e`。OpenSpec `status` 只判断 artifact 文件存在,phase/final gate 仍以 `pnpm sdd:*` 为准。
83
+
84
+ ### 检查上下文
85
+
86
+ 开始时快速检查现状:
87
+ ```bash
88
+ openspec list --json
89
+ ```
90
+
91
+ 这可以告诉你:
92
+ - 是否存在 active changes
93
+ - 它们的名称、schema 和状态
94
+ - 用户可能正在处理什么
95
+
96
+ ### 没有现有 change 时
97
+
98
+ 自由思考。当思路逐渐清晰时,可以提出:
99
+
100
+ - "这已经比较清晰,可以开始创建 change proposal。要我创建吗?"
101
+ - 或者继续探索,不必急着形式化
102
+
103
+ ### 存在相关 change 时
104
+
105
+ 如果用户提到某个 change,或你判断某个 change 相关:
106
+
107
+ 1. **读取已有 artifact 作为上下文**
108
+ - `openspec/changes/<name>/proposal.md`
109
+ - `openspec/changes/<name>/design.md`
110
+ - `openspec/changes/<name>/tasks.md`
111
+ - 其他相关 artifact
112
+
113
+ 2. **在对话中自然引用**
114
+ - "design 里提到使用 Redis,但我们刚发现 SQLite 更合适..."
115
+ - "proposal 把范围限定在高级用户,但现在看可能所有用户都需要..."
116
+
117
+ 3. **在决策形成时,建议记录到合适 artifact**
118
+
119
+ | 洞察类型 | 建议记录位置 |
120
+ | --- | --- |
121
+ | 发现新需求 | `specs/<capability>/spec.md` |
122
+ | 需求发生变化 | `specs/<capability>/spec.md` |
123
+ | 形成设计决策 | `design.md` |
124
+ | 变更范围变化 | `proposal.md` |
125
+ | 发现新工作项 | `tasks.md` |
126
+ | 假设被推翻 | 相关 artifact |
127
+
128
+ 示例:
129
+ - "这是一个设计决策,要记录到 design.md 吗?"
130
+ - "这是新需求,要补到 specs 里吗?"
131
+ - "这会改变 scope,要更新 proposal 吗?"
132
+
133
+ 4. **由用户决定是否记录**
134
+
135
+ 只提出建议,不施压,也不要自动写入。
136
+
137
+ ---
138
+
139
+ ## 你不必做什么
140
+
141
+ - 不必遵循脚本
142
+ - 不必每次都问同样的问题
143
+ - 不必产出固定 artifact
144
+ - 不必一定得出结论
145
+ - 如果有价值,可以顺着岔路探索
146
+ - 不必强行简短,探索本身就是价值
147
+
148
+ ---
149
+
150
+ ## 不同入口的处理方式
151
+
152
+ **用户带来一个模糊想法:**
153
+ ```text
154
+ 用户:我想加实时协作
155
+
156
+ 你:实时协作的范围很大。先把空间摊开看一下:
157
+
158
+ COLLABORATION SPECTRUM
159
+ ════════════════════════════════════════════
160
+
161
+ Awareness Coordination Sync
162
+ │ │ │
163
+ ▼ ▼ ▼
164
+ ┌────────┐ ┌────────┐ ┌────────┐
165
+ │Presence│ │Cursors │ │ CRDT │
166
+ │ "3人 │ │ Multi │ │Conflict│
167
+ │ 在线" │ │ select │ │ free │
168
+ └────────┘ └────────┘ └────────┘
169
+ │ │ │
170
+ 简单 中等 复杂
171
+
172
+ 你现在更接近哪一段?
173
+ ```
174
+
175
+ **用户带来一个具体问题:**
176
+ ```text
177
+ 用户:认证系统现在很乱
178
+
179
+ 你:[读取代码库]
180
+
181
+ ┌─────────────────────────────────────────────┐
182
+ │ CURRENT AUTH FLOW │
183
+ └─────────────────────────────────────────────┘
184
+
185
+ ┌─────────────┼─────────────┐
186
+ ▼ ▼ ▼
187
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
188
+ │ Google │ │ GitHub │ │ Email │
189
+ │ OAuth │ │ OAuth │ │ Magic │
190
+ └────┬────┘ └────┬────┘ └────┬────┘
191
+ │ │ │
192
+ └─────────────┼─────────────┘
193
+
194
+ ┌───────────┐
195
+ │ Session │
196
+ └─────┬─────┘
197
+
198
+
199
+ ┌───────────┐
200
+ │ Perms │
201
+ └───────────┘
202
+
203
+ 我看到三个缠在一起的点。哪个现在最急?
204
+ ```
205
+
206
+ **用户卡在实现中:**
207
+ ```text
208
+ 用户:/opsx:explore add-auth-system
209
+ OAuth 集成比预期复杂
210
+
211
+ 你:[读取 change artifact]
212
+
213
+ 你现在在 task 4:"Implement OAuth flow"
214
+
215
+ 我先追一下它牵涉哪些部分...
216
+
217
+ [画图,比较方案,提出路径]
218
+
219
+ 要把这个发现更新到 design.md 吗?
220
+ 或者加一个 spike task 先调查?
221
+ ```
222
+
223
+ **用户想比较方案:**
224
+ ```text
225
+ 用户:应该用 Postgres 还是 SQLite?
226
+
227
+ 你:泛泛回答没意义,先看上下文。
228
+
229
+ 用户:一个跟踪本地开发环境的 CLI 工具
230
+
231
+ 你:那答案就很清楚了。
232
+
233
+ ┌─────────────────────────────────────────────────┐
234
+ │ CLI TOOL DATA STORAGE │
235
+ └─────────────────────────────────────────────────┘
236
+
237
+ 关键约束:
238
+ • 不希望常驻 daemon
239
+ • 必须离线可用
240
+ • 单用户
241
+
242
+ SQLite Postgres
243
+ 部署 embedded ✓ needs server ✗
244
+ 离线 yes ✓ no ✗
245
+ 单文件 yes ✓ no ✗
246
+
247
+ SQLite 更合适。
248
+
249
+ 除非这里还有同步组件。
250
+ ```
251
+
252
+ ---
253
+
254
+ ## 结束探索
255
+
256
+ 探索没有固定结束方式。它可能:
257
+
258
+ - **流向 proposal**:"准备好了的话,我可以创建 change proposal。"
259
+ - **形成 artifact 更新**:"我可以把这些决策更新到 design.md。"
260
+ - **只是提供清晰度**:用户已经获得需要的信息
261
+ - **留待之后继续**:"之后可以随时接着这里继续"
262
+
263
+ 当思路开始成形时,可以总结:
264
+
265
+ ```text
266
+ ## 我们刚才厘清的内容
267
+
268
+ **问题**:[更清晰的问题定义]
269
+
270
+ **方向**:[如果已经形成方案]
271
+
272
+ **开放问题**:[如果还有未知]
273
+
274
+ **下一步**(如果已经准备好):
275
+ - 创建 change proposal
276
+ - 继续探索:直接接着说
277
+ ```
278
+
279
+ 这个总结是可选的。很多时候,探索过程本身就是价值。
280
+
281
+ ---
282
+
283
+ ## 约束
284
+
285
+ - **不要实现**:不要编写应用代码或实现功能。创建 OpenSpec artifact 可以,写应用代码不可以。
286
+ - **不要假装理解**:不清楚就继续调查
287
+ - **不要急于推进**:探索是思考时间,不是执行任务
288
+ - **不要强行套结构**:让模式自然浮现
289
+ - **不要自动记录**:可以建议保存洞察,但不要擅自写入
290
+ - **要可视化**:好的图比很多段文字更清楚
291
+ - **要调查代码库**:把讨论落在真实系统上
292
+ - **要质疑假设**:包括用户的假设,也包括你自己的假设