@gavin-hjw/sddflow 0.3.2 → 0.3.4
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 +154 -105
- package/README.zh-CN.md +154 -104
- package/bin/sddflow.js +1 -1
- package/dist/cli/init.js +78 -47
- package/dist/cli/status.js +22 -24
- package/dist/cli/update.js +3 -3
- package/dist/core/change-status.d.ts +9 -0
- package/dist/core/change-status.js +66 -0
- package/dist/core/constants.d.ts +14 -2
- package/dist/core/constants.js +60 -2
- package/dist/core/dependency-check.d.ts +29 -3
- package/dist/core/dependency-check.js +167 -17
- package/dist/core/skill-generator.js +15 -115
- package/dist/utils/shell.d.ts +5 -0
- package/dist/utils/shell.js +14 -5
- package/package.json +1 -1
- package/templates/SKILL.md +23 -19
- package/templates/amend.md +18 -14
- package/templates/brainstorming.md +136 -33
- package/templates/build.md +229 -81
- package/templates/close.md +204 -43
- package/templates/spec.md +192 -36
- package/templates/proposal.md +0 -62
package/templates/close.md
CHANGED
|
@@ -1,91 +1,252 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sddflow/close
|
|
3
|
-
description: Verify implementation
|
|
3
|
+
description: Verify implementation with Superpowers + OpenSpec, archive change, then finish development branch
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Close:
|
|
6
|
+
# Close: 验证 + 归档 + 收尾
|
|
7
7
|
|
|
8
8
|
## 目标
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
按顺序执行五个阶段,确保实现正确性、规格一致性,完成 OpenSpec 归档,最后处理开发分支。**每个阶段必须通过才能进入下一阶段。**
|
|
11
11
|
|
|
12
12
|
## 中断续接规则
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
- 被打断后继续回复 → 保持 close 阶段,从中断的步骤恢复
|
|
15
|
+
- close 阶段不允许修改代码;发现问题记录后切到 `/sddflow amend` 或 `/sddflow build` 修复,修复完再回到 close
|
|
15
16
|
|
|
16
17
|
## 前置条件
|
|
17
18
|
|
|
18
|
-
- `docs/superpowers/plans/`
|
|
19
|
-
- `openspec/changes/<变更名>/
|
|
19
|
+
- `docs/superpowers/plans/` 下对应 plan 文件的所有 checkbox 已勾选
|
|
20
|
+
- `openspec/changes/<变更名>/tasks.md` 所有条目为 `[x]`
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
有未完成 task 时终止:
|
|
23
|
+
> "还有 N 个任务未完成。请先用 `/sddflow build` 完成实现后再归档。"
|
|
22
24
|
|
|
23
|
-
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 阶段 1:实现验证(Superpowers verification-before-completion)
|
|
28
|
+
|
|
29
|
+
> **使用 Superpowers `verification-before-completion` skill**
|
|
30
|
+
|
|
31
|
+
**不允许跳过,不允许用"应该通过"代替实际运行。**
|
|
32
|
+
|
|
33
|
+
### 1.1 测试套件验证
|
|
34
|
+
|
|
35
|
+
运行项目完整测试命令(以实际技术栈为准):
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# 根据项目选择对应命令
|
|
39
|
+
npm test / pytest / cargo test / go test ./... / ...
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**必须看到实际输出,确认:**
|
|
43
|
+
- 所有测试通过(0 failures)
|
|
44
|
+
- 无警告或错误输出
|
|
45
|
+
|
|
46
|
+
**测试失败时终止:**
|
|
47
|
+
> "测试未通过(N failures)。请先用 `/sddflow build` 修复失败测试,再执行 close。"
|
|
48
|
+
|
|
49
|
+
### 1.2 构建验证(如适用)
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
npm run build / cargo build --release / ...
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
确认 exit code 为 0。
|
|
56
|
+
|
|
57
|
+
### 1.3 需求清单验证
|
|
24
58
|
|
|
25
|
-
|
|
59
|
+
重新读取 `plan-ready.md` 和 `openspec/changes/<变更名>/tasks.md`,逐条对照代码确认:
|
|
26
60
|
|
|
27
|
-
|
|
28
|
-
|
|
61
|
+
| 验证项 | 要求 |
|
|
62
|
+
|--------|------|
|
|
63
|
+
| 每条 task | 对应实现文件存在 |
|
|
64
|
+
| 每条 task | 对应测试文件存在且通过 |
|
|
65
|
+
| 所有 checkbox | 均为 `[x]` |
|
|
29
66
|
|
|
30
|
-
|
|
67
|
+
**有任何项目无法用实际证据(文件路径、测试输出)确认时,记录到 `close-issues.md` 并终止:**
|
|
68
|
+
> "验证失败:以下需求无实现证据 — [列表]。请先修复再执行 close。"
|
|
31
69
|
|
|
32
|
-
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## 阶段 2:代码审查(Superpowers requesting-code-review,可选)
|
|
73
|
+
|
|
74
|
+
> **使用 Superpowers `requesting-code-review` skill**
|
|
33
75
|
|
|
34
|
-
|
|
35
|
-
- 标记的架构选择是否与代码结构一致?
|
|
76
|
+
询问用户是否执行代码审查:
|
|
36
77
|
|
|
37
|
-
|
|
78
|
+
> "是否在归档前执行最终代码审查?(推荐在合并到主分支前执行)"
|
|
38
79
|
|
|
39
|
-
|
|
80
|
+
**用户选择执行时:**
|
|
40
81
|
|
|
41
|
-
|
|
82
|
+
1. 获取 git SHAs:
|
|
83
|
+
```bash
|
|
84
|
+
BASE_SHA=$(git rev-parse origin/main 2>/dev/null || git merge-base HEAD main)
|
|
85
|
+
HEAD_SHA=$(git rev-parse HEAD)
|
|
86
|
+
```
|
|
42
87
|
|
|
43
|
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
88
|
+
2. 派发 code reviewer 子代理,提供:
|
|
89
|
+
- 变更描述(来自 proposal.md 摘要)
|
|
90
|
+
- 需求文档(plan-ready.md 路径)
|
|
91
|
+
- BASE_SHA 和 HEAD_SHA
|
|
46
92
|
|
|
47
|
-
|
|
93
|
+
3. 处理 reviewer 反馈:
|
|
48
94
|
|
|
49
|
-
|
|
95
|
+
| 等级 | 处理方式 |
|
|
96
|
+
|------|----------|
|
|
97
|
+
| Critical | 终止 close,切到 `/sddflow build` 修复后重新 close |
|
|
98
|
+
| Important | 终止 close,切到 `/sddflow build` 修复后重新 close |
|
|
99
|
+
| Minor | 记录到 `close-issues.md`,可选修复,不阻塞继续 |
|
|
50
100
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
- 提示用户:
|
|
55
|
-
> "发现 N 处不一致,已记录到 close-issues.md。是否需要开启新的变更来修复?"
|
|
101
|
+
**用户选择跳过时:** 记录"用户跳过代码审查",继续阶段 3。
|
|
102
|
+
|
|
103
|
+
---
|
|
56
104
|
|
|
57
|
-
|
|
105
|
+
## 阶段 3:规格一致性验证
|
|
58
106
|
|
|
59
|
-
|
|
107
|
+
> 本项目无 `/opsx:verify` 命令;按下列步骤手工验证,并配合 OpenSpec CLI。
|
|
108
|
+
|
|
109
|
+
### 3.1 CLI 校验(如可用)
|
|
60
110
|
|
|
61
111
|
```bash
|
|
62
112
|
openspec validate <变更名> --strict
|
|
63
113
|
```
|
|
64
114
|
|
|
65
|
-
|
|
115
|
+
校验失败 → 修正规格或实现后重新 close。
|
|
116
|
+
|
|
117
|
+
### 3.2 三维度对照(记录到 `openspec/changes/<变更名>/close-issues.md`)
|
|
118
|
+
|
|
119
|
+
| 维度 | 检查内容 |
|
|
120
|
+
|------|----------|
|
|
121
|
+
| **Completeness** | `tasks.md` checkbox 全部 `[x]`;plan 文件 checkbox 全部 `[x]`;所有规格需求有实现证据 |
|
|
122
|
+
| **Correctness** | 实现与 `specs/**/spec.md` 中 Requirement、Scenario 一致 |
|
|
123
|
+
| **Coherence** | 若存在 `design.md`:代码遵循其决策;若无 `design.md`:代码与 `proposal.md` / `specs/**` 一致,且符合项目既有模式 |
|
|
124
|
+
|
|
125
|
+
### 3.3 处理结果
|
|
126
|
+
|
|
127
|
+
| 等级 | 处理方式 |
|
|
128
|
+
|------|----------|
|
|
129
|
+
| CRITICAL | 终止 close;写入 `close-issues.md`;提示 `/sddflow amend` + `/sddflow build` 后重新 close |
|
|
130
|
+
| WARNING | 展示给用户,询问是否修复;用户确认后可继续归档 |
|
|
131
|
+
| SUGGESTION | 记录到 `close-issues.md`,不阻塞归档 |
|
|
132
|
+
|
|
133
|
+
**存在 CRITICAL 时输出:**
|
|
134
|
+
> "规格验证失败,存在 N 个 CRITICAL 问题(见 close-issues.md)。请用 `/sddflow amend` 修订需求或用 `/sddflow build` 补充实现后再执行 close。"
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 阶段 4:归档(OpenSpec: Archive + openspec/specs 同步)
|
|
139
|
+
|
|
140
|
+
> **优先使用 Cursor/Claude 命令 `OpenSpec: Archive`,或 OpenSpec CLI `openspec archive`**
|
|
141
|
+
|
|
142
|
+
### 4.1 前置确认
|
|
143
|
+
|
|
144
|
+
阶段 3 通过(无 CRITICAL)后,向用户确认:
|
|
145
|
+
|
|
146
|
+
> "验证通过。准备归档变更 `<变更名>`。此操作将:
|
|
147
|
+
> 1. 将 delta specs 同步合并到 `openspec/specs/`(除非明确为纯工具变更)
|
|
148
|
+
> 2. 将 `openspec/changes/<变更名>/` 移动到 `openspec/changes/archive/YYYY-MM-DD-<变更名>/`
|
|
149
|
+
>
|
|
150
|
+
> 确认归档?"
|
|
151
|
+
|
|
152
|
+
### 4.2 执行归档
|
|
153
|
+
|
|
154
|
+
**方式 A — 编辑器命令(推荐):** 调用 `OpenSpec: Archive`,按提示选择变更 ID。
|
|
155
|
+
|
|
156
|
+
**方式 B — CLI:**
|
|
66
157
|
|
|
67
158
|
```bash
|
|
68
159
|
openspec archive <变更名> --yes
|
|
69
160
|
```
|
|
70
161
|
|
|
71
|
-
|
|
162
|
+
归档流程应完成:
|
|
163
|
+
|
|
164
|
+
1. 检查所有 artifact 与 `tasks.md` 完成状态
|
|
165
|
+
2. 评估 delta specs 与 `openspec/specs/` 的差异
|
|
166
|
+
3. 同步 delta specs 到 `openspec/specs/<capability>/spec.md`(推荐;纯工具变更可用 `--skip-specs`)
|
|
167
|
+
4. 将变更目录移入 `openspec/changes/archive/`
|
|
168
|
+
|
|
169
|
+
归档后运行(如 CLI 可用):
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
openspec validate --strict
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 4.3 确认归档结果
|
|
176
|
+
|
|
177
|
+
归档完成后确认:
|
|
178
|
+
- `openspec/changes/archive/YYYY-MM-DD-<变更名>/` 目录存在
|
|
179
|
+
- `openspec/specs/` 相关能力的规格已更新(如有 delta specs)
|
|
180
|
+
- `openspec/changes/<变更名>/` 已不在 active changes 列表
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
184
|
+
## 阶段 5:收尾开发分支(Superpowers finishing-a-development-branch)
|
|
185
|
+
|
|
186
|
+
> **如果使用了 git worktree 或 feature branch,则执行本阶段**
|
|
187
|
+
> **使用 Superpowers `finishing-a-development-branch` skill**
|
|
188
|
+
|
|
189
|
+
**声明:** 输出:
|
|
190
|
+
> "正在使用 finishing-a-development-branch skill 收尾开发分支。"
|
|
191
|
+
|
|
192
|
+
### 5.1 检测是否需要执行
|
|
193
|
+
|
|
194
|
+
检查当前工作区:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
GIT_DIR=$(cd "$(git rev-parse --git-dir)" 2>/dev/null && pwd -P)
|
|
198
|
+
GIT_COMMON=$(cd "$(git rev-parse --git-common-dir)" 2>/dev/null && pwd -P)
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
- 普通仓库且在主分支上 → 跳过本阶段,直接到完成提示
|
|
202
|
+
- 在 feature branch 或 worktree 上 → 执行本阶段
|
|
203
|
+
|
|
204
|
+
### 5.2 再次验证测试(finishing-a-development-branch 要求)
|
|
72
205
|
|
|
73
206
|
```bash
|
|
74
|
-
|
|
75
|
-
|
|
207
|
+
# 运行完整测试套件
|
|
208
|
+
<项目测试命令>
|
|
76
209
|
```
|
|
77
210
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
211
|
+
测试失败时 finishing-a-development-branch 会拒绝继续,需先修复。
|
|
212
|
+
|
|
213
|
+
### 5.3 呈现选项
|
|
81
214
|
|
|
82
|
-
|
|
215
|
+
按 `finishing-a-development-branch` skill 流程,呈现:
|
|
83
216
|
|
|
84
|
-
|
|
217
|
+
```
|
|
218
|
+
1. 合并到 <base-branch>(本地 merge)
|
|
219
|
+
2. 推送并创建 Pull Request
|
|
220
|
+
3. 保留分支现状(稍后处理)
|
|
221
|
+
4. 丢弃此分支
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 5.4 执行选择并清理 worktree
|
|
225
|
+
|
|
226
|
+
按用户选择执行,worktree 清理规则:
|
|
227
|
+
- 选项 1(merge)或 选项 4(discard)→ 清理 worktree
|
|
228
|
+
- 选项 2(PR)或 选项 3(keep)→ 保留 worktree
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
## 完成提示
|
|
233
|
+
|
|
234
|
+
> "变更 `<变更名>` 已完成全部关闭流程:
|
|
235
|
+
>
|
|
236
|
+
> ✅ 阶段 1:实现验证通过(测试全绿)
|
|
237
|
+
> ✅ 阶段 2:代码审查完成(或已跳过)
|
|
238
|
+
> ✅ 阶段 3:OpenSpec 验证通过
|
|
239
|
+
> ✅ 阶段 4:已归档至 openspec/changes/archive/YYYY-MM-DD-<变更名>/
|
|
240
|
+
> ✅ 阶段 5:开发分支已处理(或不适用)
|
|
241
|
+
>
|
|
242
|
+
> 可以开始下一个变更了。"
|
|
243
|
+
|
|
244
|
+
---
|
|
85
245
|
|
|
86
246
|
## 关键原则
|
|
87
247
|
|
|
88
|
-
- close
|
|
89
|
-
-
|
|
90
|
-
-
|
|
91
|
-
-
|
|
248
|
+
- close 阶段**不修改任何代码或实现文件**,只做验证、记录、归档
|
|
249
|
+
- 验证必须有实际命令输出作为证据,不允许用"应该通过"代替运行
|
|
250
|
+
- CRITICAL 问题必须修复后才能归档,WARNING 可询问用户决定
|
|
251
|
+
- finishing-a-development-branch 放在最后,确保归档完成后再处理分支
|
|
252
|
+
- 不一致项优先记录到 `close-issues.md`,不在 close 阶段现场修代码
|
package/templates/spec.md
CHANGED
|
@@ -1,68 +1,124 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sddflow/spec
|
|
3
|
-
description:
|
|
3
|
+
description: Complete OpenSpec change artifacts per AGENTS.md and OpenSpec Proposal, then translate to plan-ready.md and writing-plans
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# Spec:
|
|
6
|
+
# Spec: 生成规格 + 实现计划
|
|
7
7
|
|
|
8
8
|
## 目标
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
1. **按 OpenSpec 官方流程**补齐 `specs/`、`tasks.md`;`design.md` **按需**创建(`proposal.md` 通常已由前一阶段提供)
|
|
11
|
+
2. 翻译为工程视角的 `plan-ready.md`(sddflow 翻译层,不改变 OpenSpec 制品格式)
|
|
12
|
+
3. 调用 Superpowers `writing-plans` skill 生成可执行的详细实现计划(`docs/superpowers/plans/YYYY-MM-DD-<变更名>.md`)
|
|
13
|
+
|
|
14
|
+
**spec 阶段产出全部文档后,build 阶段直接进入执行,不再生成计划。**
|
|
11
15
|
|
|
12
16
|
## 中断续接规则
|
|
13
17
|
|
|
14
|
-
如果用户在本阶段被打断后继续回复、补充范围、要求调整规格、或确认规格摘要,仍然停留在 spec 阶段。只更新 `openspec/changes
|
|
18
|
+
如果用户在本阶段被打断后继续回复、补充范围、要求调整规格、或确认规格摘要,仍然停留在 spec 阶段。只更新 `openspec/changes/**`、`plan-ready.md` 和 plan 文件,不要修改任何代码或实现文件。
|
|
15
19
|
|
|
16
20
|
## 前置条件
|
|
17
21
|
|
|
18
|
-
- `openspec/changes/` 下存在活跃变更目录(由
|
|
22
|
+
- `openspec/changes/` 下存在活跃变更目录(由 brainstorming 阶段创建)
|
|
19
23
|
- 变更目录下至少有 `proposal.md`
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
---
|
|
22
26
|
|
|
23
|
-
|
|
27
|
+
## 步骤 1:确认活跃变更
|
|
24
28
|
|
|
25
29
|
检查 `openspec/changes/` 下是否有活跃变更(非 archive 子目录)。
|
|
26
30
|
|
|
27
|
-
|
|
28
|
-
> "还没有活跃变更。请先用 /sddflow
|
|
31
|
+
没有时提示:
|
|
32
|
+
> "还没有活跃变更。请先用 /sddflow brainstorming 创建需求。"
|
|
29
33
|
|
|
30
|
-
|
|
34
|
+
多个时列出并让用户选择:
|
|
31
35
|
> "检测到多个活跃变更:[列表]。要对哪个生成规格?"
|
|
32
36
|
|
|
33
|
-
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 步骤 2:生成 OpenSpec 规格制品(specs/ + tasks.md;design.md 按需)
|
|
40
|
+
|
|
41
|
+
<HARD-GATE>
|
|
42
|
+
本步骤**必须**完全遵循 OpenSpec 官方规范,**禁止**使用 sddflow 自订格式、自订章节结构或替代生成流程。
|
|
43
|
+
</HARD-GATE>
|
|
44
|
+
|
|
45
|
+
### 2.1 必读与唯一规范来源
|
|
46
|
+
|
|
47
|
+
执行前**完整阅读**并严格遵守(冲突时以 OpenSpec 为准):
|
|
48
|
+
|
|
49
|
+
1. `openspec/AGENTS.md` — Stage 1、Creating Change Proposals、Spec File Format、Delta Operations、Troubleshooting
|
|
50
|
+
2. 项目内 **`OpenSpec: Proposal`** 命令(如 `.claude/commands/openspec/proposal.md`)中 `<!-- OPENSPEC:START -->` … `<!-- OPENSPEC:END -->` 的 **Guardrails** 与 **Steps**
|
|
34
51
|
|
|
35
|
-
|
|
52
|
+
**声明(必须输出):**
|
|
53
|
+
> "正在按 OpenSpec 官方流程补齐 specs/ 与 tasks.md(design.md 按需;遵循 openspec/AGENTS.md 与 OpenSpec: Proposal)。"
|
|
36
54
|
|
|
37
|
-
|
|
38
|
-
- `openspec/changes/<变更名>/design.md` — 技术方案
|
|
39
|
-
- `openspec/changes/<变更名>/specs/` — 具体规格变更(标记新增/修改/删除)
|
|
40
|
-
- `openspec/changes/<变更名>/tasks.md` — 实现任务清单
|
|
55
|
+
### 2.2 执行方式
|
|
41
56
|
|
|
42
|
-
|
|
57
|
+
在已确认 `<变更名>` 且 `openspec/changes/<变更名>/proposal.md` 已存在的前提下,**逐条执行 OpenSpec: Proposal 的步骤 1–7**(与 AGENTS.md Stage 1 一致):
|
|
58
|
+
|
|
59
|
+
1. 调研上下文:`openspec/project.md`、`openspec list`、`openspec list --specs`,必要时 `rg` / `openspec show` / 阅读相关代码
|
|
60
|
+
2. 确认 `change-id` 为 `<变更名>`;**不要**用 sddflow 模板替换已有 `proposal.md`,仅在 OpenSpec 规范要求或与用户确认后,将内容对齐为 AGENTS.md 的 `## Why` / `## What Changes` / `## Impact` 结构
|
|
61
|
+
3. 将变更映射到 capability,按 OpenSpec: Proposal 步骤 3 拆分多能力 delta
|
|
62
|
+
4. 按 AGENTS.md **Creating Change Proposals** 第 5 节判定是否创建 `design.md`;不需要则**不得**添加空 `design.md`
|
|
63
|
+
5. 在 `openspec/changes/<变更名>/specs/<capability>/spec.md` 撰写 delta(`## ADDED|MODIFIED|REMOVED|RENAMED Requirements`;每条 requirement 至少一个 `#### Scenario:`;`MODIFIED` 须粘贴 `openspec/specs/` 中完整 requirement 后再改)
|
|
64
|
+
6. 按 OpenSpec: Proposal 步骤 6 撰写 `tasks.md`(有序、可勾选、含验证项);生成后须符合「三文档 Checkbox 对齐扩展」中 **tasks.md** 条款
|
|
65
|
+
7. 运行严格校验(见 2.3)
|
|
66
|
+
|
|
67
|
+
**禁止:**
|
|
68
|
+
|
|
69
|
+
- 自订 spec 模板、自订 requirement/scenario 写法(一律以 AGENTS.md 为准)
|
|
70
|
+
- 凭经验生成 delta 而未对照 `openspec/specs/` 与 AGENTS.md
|
|
71
|
+
- 跳过 `openspec validate` 或忽略校验错误
|
|
72
|
+
|
|
73
|
+
### 2.3 校验
|
|
43
74
|
|
|
44
75
|
```bash
|
|
45
76
|
openspec validate <变更名> --strict
|
|
46
77
|
```
|
|
47
78
|
|
|
48
|
-
|
|
79
|
+
校验失败时:使用 `openspec show <变更名> --json --deltas-only` 排查,按 AGENTS.md **Troubleshooting** 修正后重新校验,直至通过。
|
|
49
80
|
|
|
50
|
-
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
## 步骤 3:与用户确认规格
|
|
51
84
|
|
|
52
85
|
展示规格摘要,逐项确认:
|
|
53
86
|
|
|
54
87
|
> "以下是规格摘要:
|
|
55
88
|
> - **提案**:[proposal.md 核心内容]
|
|
56
|
-
> - **设计**:[design.md
|
|
89
|
+
> - **设计**:[若存在 design.md → 核心决策;否则 → 无 design.md(OpenSpec 判定无需技术设计文档)]
|
|
90
|
+
> - **规格**:[specs/ 变更列表]
|
|
57
91
|
> - **任务**:[tasks.md 任务列表]
|
|
58
92
|
>
|
|
59
93
|
> 有需要调整的地方吗?"
|
|
60
94
|
|
|
61
|
-
|
|
95
|
+
用户确认后才进入步骤 4。
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 三文档 Checkbox 对齐扩展(通用)
|
|
100
|
+
|
|
101
|
+
以下扩展**不改变**各文档的原有生成逻辑,仅在生成结果上**追加/保留** Markdown checkbox(`- [ ]` / `- [x]`),用于判断「是否已实现」并在 `/sddflow build` 时三向同步。`[ ]` = 未完成,`[x]` = 已完成。
|
|
102
|
+
|
|
103
|
+
| 文档 | 原有生成逻辑(不得替换) | sddflow 追加:必须有 checkbox |
|
|
104
|
+
|------|------------------------|------------------------------|
|
|
105
|
+
| **tasks.md** | OpenSpec: Proposal 步骤 6 + AGENTS.md 任务清单结构 | 每条**可交付/可验收**的实现项必须以 `- [ ]` 或 `- [x]` 开头;保留 OpenSpec 章节与编号(如 `## 1. Implementation`、`- [ ] 1.1 ...`),**禁止**改成无 checkbox 的纯列表或段落 |
|
|
106
|
+
| **plan-ready.md** | 步骤 4 翻译层(目标 / 改动文件 / 验证方式) | 每个 `### Task N:` 块内**首行**必须为 `- [ ] **任务完成**`(build 完成该 Task 后改为 `[x]`);不得删除翻译正文,仅追加该行 |
|
|
107
|
+
| **superpowers plan** | Superpowers `writing-plans`(Header、Task、Step、TDD 步骤) | 保留 writing-plans 规定的**每个 Step** `- [ ]`;在每个 `### Task N` 块**末尾**(最后一个 Step 之后)追加 `- [ ] **Task complete**`(该 Task 全部 Step 已为 `[x]` 后方可勾选,并与 plan-ready、tasks 同步) |
|
|
108
|
+
|
|
109
|
+
**对齐规则:**
|
|
110
|
+
|
|
111
|
+
- `Task N` 序号在三份文档间一一对应(从 1 递增)
|
|
112
|
+
- 判断「整个 Task 是否完成」:三份文档中该 Task 的**任务级** checkbox 均为 `[x]`,且 superpowers plan 该 Task 下**所有 Step** checkbox 均为 `[x]`
|
|
113
|
+
- 判断「变更是否全部完成」:三份文档中**全部**任务级 checkbox 与 superpowers plan **全部** Step checkbox 均为 `[x]`(供 `/sddflow close` 前置检查)
|
|
114
|
+
|
|
115
|
+
步骤 2、4、5 完成后须自检上表;缺 checkbox 或 Task 序号不一致 → 修正后再进入下一步。
|
|
116
|
+
|
|
117
|
+
---
|
|
62
118
|
|
|
63
|
-
|
|
119
|
+
## 步骤 4:生成 plan-ready.md(翻译层)
|
|
64
120
|
|
|
65
|
-
|
|
121
|
+
将 OpenSpec 制品翻译为工程视角的执行格式(**并满足上文「三文档 Checkbox 对齐扩展」中 plan-ready.md 条款**)。
|
|
66
122
|
|
|
67
123
|
**翻译规则:**
|
|
68
124
|
1. 每个 OpenSpec Task 拆成 2-5 个细粒度步骤(对应 2-5 分钟工作量)
|
|
@@ -71,26 +127,21 @@ openspec validate <变更名> --strict
|
|
|
71
127
|
4. **按执行依赖排序,不是按功能模块排序**
|
|
72
128
|
5. 记录来源路径,方便回溯
|
|
73
129
|
|
|
74
|
-
|
|
75
|
-
- `openspec/changes/<变更名>/proposal.md`
|
|
76
|
-
- `openspec/changes/<变更名>/design.md`
|
|
77
|
-
- `openspec/changes/<变更名>/specs/` 目录下所有文件
|
|
78
|
-
- `openspec/changes/<变更名>/tasks.md`
|
|
79
|
-
|
|
80
|
-
生成 `openspec/changes/<变更名>/plan-ready.md`,格式如下:
|
|
130
|
+
**输出路径:** `openspec/changes/<变更名>/plan-ready.md`
|
|
81
131
|
|
|
82
132
|
```markdown
|
|
83
133
|
# 实现计划:<变更名>
|
|
84
134
|
|
|
85
135
|
## 来源
|
|
86
136
|
- 提案:openspec/changes/<变更名>/proposal.md
|
|
87
|
-
-
|
|
137
|
+
- 设计:<若存在 design.md 则写路径;否则写「无(OpenSpec 判定无需)」>
|
|
88
138
|
- 规格:openspec/changes/<变更名>/specs/
|
|
89
139
|
- 任务:openspec/changes/<变更名>/tasks.md
|
|
90
140
|
|
|
91
141
|
## 实现步骤
|
|
92
142
|
|
|
93
143
|
### Task 1: <任务名>
|
|
144
|
+
- [ ] **任务完成**(与 superpowers plan `Task 1`、`tasks.md` 对应条目同步勾选)
|
|
94
145
|
- 目标:<做什么>
|
|
95
146
|
- 改动文件:<哪些文件>
|
|
96
147
|
- 验证方式:<怎么验证>
|
|
@@ -98,14 +149,119 @@ openspec validate <变更名> --strict
|
|
|
98
149
|
### Task 2: ...
|
|
99
150
|
```
|
|
100
151
|
|
|
101
|
-
|
|
152
|
+
步骤 4 中每个 `### Task N` 的标题与序号须与 `tasks.md`、`writing-plans` 产出中的 Task N **一一对应**。
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
## 步骤 5:生成详细实现计划(writing-plans)
|
|
157
|
+
|
|
158
|
+
<HARD-GATE>
|
|
159
|
+
本步骤**必须**完整遵循 Superpowers **`writing-plans`** skill(读取并执行其全文:Scope Check、File Structure、Bite-Sized Task Granularity、Plan Document Header、Task Structure、No Placeholders、Self-Review)。**禁止**用本节自订格式替代 writing-plans 的 Task/Step 结构或占位符规则。
|
|
160
|
+
</HARD-GATE>
|
|
161
|
+
|
|
162
|
+
### 5.1 调用 writing-plans
|
|
163
|
+
|
|
164
|
+
1. **先读取** Superpowers `writing-plans` skill(`writing-plans/SKILL.md`)
|
|
165
|
+
2. **必须声明**(与 skill 一致,可中英任选其一):
|
|
166
|
+
> "I'm using the writing-plans skill to create the implementation plan."
|
|
167
|
+
> 或:「正在使用 writing-plans skill 生成详细实现计划。」
|
|
168
|
+
3. **输入上下文**(除 writing-plans 要求的 spec 外,sddflow 强制一并阅读):
|
|
169
|
+
- `openspec/changes/<变更名>/plan-ready.md`
|
|
170
|
+
- `openspec/changes/<变更名>/tasks.md`
|
|
171
|
+
- `openspec/changes/<变更名>/proposal.md`、`design.md`(若存在)、`specs/`
|
|
172
|
+
4. **保存路径**(与 writing-plans 默认一致,变更名替换 feature-name):
|
|
173
|
+
`docs/superpowers/plans/YYYY-MM-DD-<变更名>.md`
|
|
174
|
+
|
|
175
|
+
按 writing-plans 顺序执行:**Scope Check → File Structure → 分解 Task/Step → 写入计划 → Self-Review**。
|
|
176
|
+
|
|
177
|
+
### 5.2 sddflow 追溯与 Checkbox 扩展(在 writing-plans 规则之上追加)
|
|
178
|
+
|
|
179
|
+
在**不修改** writing-plans 规定的 Plan Header 与 Task/Step 主体结构的前提下,追加:
|
|
180
|
+
|
|
181
|
+
1. **Checkbox** — 须满足「三文档 Checkbox 对齐扩展」中 **superpowers plan** 条款(含每个 Task 末尾的 `- [ ] **Task complete**`)
|
|
182
|
+
2. **追溯字段** — 供 `/sddflow build` 定位并同步三份文档:
|
|
183
|
+
|
|
184
|
+
**Plan Header 在 writing-plans 必填项之后追加:**
|
|
185
|
+
|
|
186
|
+
```markdown
|
|
187
|
+
**Traceability (sddflow):**
|
|
188
|
+
- plan-ready: `openspec/changes/<变更名>/plan-ready.md`
|
|
189
|
+
- tasks: `openspec/changes/<变更名>/tasks.md`
|
|
190
|
+
- plan: `docs/superpowers/plans/YYYY-MM-DD-<变更名>.md`
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
**每个 `### Task N` 正文开头(位于 `**Files:**` 之前)必须包含:**
|
|
194
|
+
|
|
195
|
+
```markdown
|
|
196
|
+
> **trace:** plan-ready.md → `### Task N: <与 plan-ready 完全一致的标题>` | tasks.md → `<tasks.md 中对应条目的原文整行,含 checkbox>`
|
|
197
|
+
> **sync:** tasks.md → `<与 trace 中 tasks.md 行相同的原文整行>` | plan-ready.md → `### Task N: <标题>`
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
规则:
|
|
201
|
+
- `Task N` 序号在 plan 文件、`plan-ready.md`、`tasks.md` 三者间**一一对应**(N 从 1 递增,不跳号)
|
|
202
|
+
- `trace` / `sync` 中的 `tasks.md`、`plan-ready.md` 引用必须是**可精确匹配的原文**(build 靠此行定位勾选位置)
|
|
203
|
+
- 每个 OpenSpec `tasks.md` 顶层待实现 checkbox 条目至少对应一个 superpowers plan `Task`;每个 `plan-ready.md` 的 `### Task N` 至少对应一个 superpowers plan `Task`
|
|
204
|
+
- writing-plans 的每个 Step 仍使用 `- [ ]` checkbox(build 每完成 Step 立即勾选)
|
|
205
|
+
|
|
206
|
+
**每个 Task 末尾追加(最后一个 Step 之后):**
|
|
207
|
+
|
|
208
|
+
```markdown
|
|
209
|
+
- [ ] **Task complete**(本 Task 全部 Step 为 `[x]` 后勾选;与 plan-ready **任务完成**、tasks.md 对应行同步)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
**build 阶段同步契约(写入计划时须自检):**
|
|
213
|
+
|
|
214
|
+
| 完成粒度 | 须勾选位置 |
|
|
215
|
+
|----------|------------|
|
|
216
|
+
| 每个 Step 完成 | superpowers plan 对应该 Step 的 `- [ ]` → `[x]` |
|
|
217
|
+
| 整个 Task 完成 | 该 Task 全部 Step 为 `[x]`;superpowers plan **Task complete** → `[x]`;`tasks.md` 中 `sync` 指向行 → `[x]`;`plan-ready.md` 中 **任务完成** → `[x]` |
|
|
218
|
+
|
|
219
|
+
### 5.3 禁止占位符与自检
|
|
220
|
+
|
|
221
|
+
**占位符:** 以 writing-plans skill **No Placeholders** 为准(禁止 TBD/TODO/无代码的「写测试」等);不得因 sddflow 追溯字段而省略完整代码与命令。
|
|
222
|
+
|
|
223
|
+
**写完计划后依次执行:**
|
|
224
|
+
|
|
225
|
+
1. writing-plans **Self-Review**(Spec coverage、Placeholder scan、Type consistency)
|
|
226
|
+
2. **三文档 Checkbox 自检**(见「三文档 Checkbox 对齐扩展」):tasks.md、plan-ready.md、superpowers plan 任务级与 Step 级 checkbox 齐全
|
|
227
|
+
3. sddflow 追溯自检(全部为真才进入步骤 6):
|
|
228
|
+
- [ ] `docs/superpowers/plans/YYYY-MM-DD-<变更名>.md` 已存在
|
|
229
|
+
- [ ] Plan Header 含 writing-plans 必填项 + `**Traceability (sddflow):**`
|
|
230
|
+
- [ ] 至少 1 个 Task,且 Task 数与 `tasks.md`、`plan-ready.md` 的 `### Task` 数量一致
|
|
231
|
+
- [ ] 每个 Task 含 `> **trace:**`、`> **sync:**`,且末尾有 `- [ ] **Task complete**`
|
|
232
|
+
- [ ] 每个 Step 为 writing-plans 粒度,含完整代码块与 Run/Expected(无占位符)
|
|
233
|
+
|
|
234
|
+
有任一不通过 → 按 writing-plans Self-Review 修正后重做追溯自检,禁止进入步骤 6。
|
|
235
|
+
|
|
236
|
+
---
|
|
237
|
+
|
|
238
|
+
## 步骤 6:汇总确认并提示
|
|
239
|
+
|
|
240
|
+
向用户展示所有产出:
|
|
241
|
+
|
|
242
|
+
> "spec 阶段完成,以下文件已就绪:
|
|
243
|
+
>
|
|
244
|
+
> **OpenSpec 规格:**
|
|
245
|
+
> - `openspec/changes/<变更名>/proposal.md` ✓
|
|
246
|
+
> - `openspec/changes/<变更名>/design.md` ✓(若存在;否则注明「无 design.md,符合 OpenSpec 可选规则」)
|
|
247
|
+
> - `openspec/changes/<变更名>/specs/` ✓
|
|
248
|
+
> - `openspec/changes/<变更名>/tasks.md` ✓
|
|
249
|
+
>
|
|
250
|
+
> **执行计划:**
|
|
251
|
+
> - `openspec/changes/<变更名>/plan-ready.md` ✓
|
|
252
|
+
> - `docs/superpowers/plans/YYYY-MM-DD-<变更名>.md` ✓
|
|
253
|
+
>
|
|
254
|
+
> 接下来可以用 `/sddflow build` 开始实现。build 会严格校验以上文件完整性后直接执行,不再重新生成计划。"
|
|
102
255
|
|
|
103
|
-
|
|
256
|
+
---
|
|
104
257
|
|
|
105
258
|
## 关键原则
|
|
106
259
|
|
|
260
|
+
- **OpenSpec 制品(design.md / specs/ / tasks.md)只按 AGENTS.md + OpenSpec: Proposal 生成**,sddflow 不在此步骤引入自订规则
|
|
107
261
|
- **一条代码都不许写** — spec 阶段只产出文档
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
262
|
+
- 只允许写 `openspec/changes/**`、`plan-ready.md`、`docs/superpowers/plans/*.md`,禁止修改任何代码
|
|
263
|
+
- 翻译(plan-ready.md、writing-plans)在用户确认 OpenSpec 规格后进行,不改变 delta spec 格式
|
|
264
|
+
- 三份任务文档均须满足「三文档 Checkbox 对齐扩展」,便于对齐是否已实现
|
|
265
|
+
- 步骤 5 须通过 writing-plans Self-Review、Checkbox 自检与追溯自检,否则不允许结束 spec 阶段
|
|
266
|
+
- plan-ready.md 的 `## 来源` 部分必须写明路径
|
|
111
267
|
- 按执行依赖排序是翻译的关键步骤:先依赖后依赖方
|
package/templates/proposal.md
DELETED
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: sddflow/proposal
|
|
3
|
-
description: Lightweight requirement capture — 3-5 questions to quickly converge on requirements
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
# Proposal: 轻量需求捕获
|
|
7
|
-
|
|
8
|
-
## 目标
|
|
9
|
-
|
|
10
|
-
用最少的提问,把用户脑子里的需求变成可执行的变更描述。不做深度设计,不生成代码。
|
|
11
|
-
|
|
12
|
-
## 中断续接规则
|
|
13
|
-
|
|
14
|
-
如果用户在本阶段被打断后继续回复、补充范围、回答确认问题、或修正边界,仍然停留在 proposal 阶段。继续更新 `openspec/changes/**/proposal.md`,不要因为用户说“就这样做”“继续”“范围改成 X”而写任何代码或实现文件。
|
|
15
|
-
|
|
16
|
-
典型错误:proposal 阶段确认“只改企业端?”后,用户回复“运营端也要做回显”。这只是需求范围补充,必须继续更新 proposal,不得直接修改任何代码或实现文件。
|
|
17
|
-
|
|
18
|
-
## 流程
|
|
19
|
-
|
|
20
|
-
### 1. 提出关键问题
|
|
21
|
-
|
|
22
|
-
一次性提出以下 3-5 个核心问题(根据上下文调整措辞):
|
|
23
|
-
|
|
24
|
-
1. **做什么** — 你想实现什么功能/变更?
|
|
25
|
-
2. **为什么** — 解决什么问题?给谁用的?
|
|
26
|
-
3. **成功标准** — 怎样算做完了?验收条件是什么?
|
|
27
|
-
4. **边界** — 什么不在范围内?
|
|
28
|
-
5. **现有约束** — 有没有技术栈、兼容性、时间上的限制?
|
|
29
|
-
|
|
30
|
-
### 2. 确认需求
|
|
31
|
-
|
|
32
|
-
用户回答后,整理成一段简洁的需求描述,与用户确认:
|
|
33
|
-
|
|
34
|
-
> "我理解的需求是:[一句话概括]。具体来说:[2-3 条要点]。这样理解对吗?"
|
|
35
|
-
|
|
36
|
-
### 3. 创建 OpenSpec 变更目录
|
|
37
|
-
|
|
38
|
-
用户确认后,按 OpenSpec 目录约定创建变更。`<变更名>` 使用 kebab-case、动词开头(如 `add-user-login`):
|
|
39
|
-
|
|
40
|
-
```bash
|
|
41
|
-
mkdir -p openspec/changes/<变更名>/specs
|
|
42
|
-
```
|
|
43
|
-
|
|
44
|
-
将确认的需求描述写入 `openspec/changes/<变更名>/proposal.md`。
|
|
45
|
-
|
|
46
|
-
如果 OpenSpec CLI 可用,可用以下命令检查当前变更列表:
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
openspec list
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
### 4. 提示下一步
|
|
53
|
-
|
|
54
|
-
> "需求已记录。接下来可以用 `/sddflow spec` 生成完整规格,或继续补充细节。"
|
|
55
|
-
|
|
56
|
-
## 注意
|
|
57
|
-
|
|
58
|
-
- 不要做技术设计,那是 spec 和 brainstorming 的事
|
|
59
|
-
- 不要写代码
|
|
60
|
-
- 本阶段只允许写 OpenSpec 需求文档,禁止修改任何代码或实现文件
|
|
61
|
-
- 问题要具体,不要泛泛而谈
|
|
62
|
-
- 如果用户的需求很大(跨多个独立子系统),建议拆分
|