@gordon.gan/specflow 1.0.2 → 1.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.
- package/README.md +277 -311
- package/dist/cli/commands/change-archive.js +1 -1
- package/dist/cli/commands/change-new.js +1 -1
- package/dist/cli/commands/change-phase.d.ts +1 -1
- package/dist/cli/commands/change-phase.js +7 -6
- package/dist/core/archive.d.ts +2 -2
- package/dist/core/archive.js +5 -5
- package/dist/core/artifact-graph/types.d.ts +2 -2
- package/dist/integrations/claude/adapter.js +2 -0
- package/dist/integrations/codex/adapter.js +4 -1
- package/dist/integrations/cursor/adapter.js +4 -1
- package/dist/integrations/shared/phase-context.d.ts +6 -0
- package/dist/integrations/shared/phase-context.js +9 -0
- package/dist/integrations/shared/retired-commands.d.ts +10 -0
- package/dist/integrations/shared/retired-commands.js +42 -0
- package/dist/utils/change-metadata.d.ts +11 -3
- package/dist/utils/change-metadata.js +33 -5
- package/dist/utils/change-utils.d.ts +1 -1
- package/dist/utils/change-utils.js +1 -1
- package/package.json +1 -1
- package/prompts/apply/phase-a-plan.md +1 -1
- package/prompts/propose/design-draft.md +4 -4
- package/prompts/propose/tasks-draft.md +1 -1
- package/prompts/refine/brainstorm.md +2 -2
- package/skills/specflow-apply/SKILL.md +2 -2
- package/skills/specflow-archive/SKILL.md +1 -1
- package/skills/specflow-explore/SKILL.md +1 -1
- package/skills/specflow-fix/SKILL.md +2 -2
- package/skills/specflow-propose/SKILL.md +1 -1
- package/skills/specflow-refine/SKILL.md +5 -5
- package/skills/specflow-snap/SKILL.md +1 -1
package/README.md
CHANGED
|
@@ -4,341 +4,274 @@
|
|
|
4
4
|
[](https://www.npmjs.com/package/@gordon.gan/specflow)
|
|
5
5
|
[](./LICENSE)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
**规范驱动开发,从想清楚到归档上线,一条流水线走完。**
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
> Codex 用户可直接参考:`CODEX_PACKAGING_AND_USAGE_GUIDE.md`
|
|
9
|
+
SpecFlow 把 **OpenSpec**(结构化需求规划)和 **Superpowers**(TDD、调试、代码审查等工程纪律)合并为一个工具:一个 CLI 负责确定性操作,一套跨 IDE 工作流技能负责 AI 编排,覆盖从探索需求到归档合并的完整生命周期。
|
|
11
10
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
| 环境 | 命令形式 | 详细指南 |
|
|
12
|
+
|------|----------|----------|
|
|
13
|
+
| Claude Code | `/specflow:propose` 等斜杠命令 | 本文 |
|
|
14
|
+
| Cursor | `specflow:propose` 等命令 | [Cursor 指南](./CURSOR_PACKAGING_AND_USAGE_GUIDE.md) |
|
|
15
|
+
| OpenAI Codex | `$specflow-propose` 等技能 | [Codex 指南](./CODEX_PACKAGING_AND_USAGE_GUIDE.md) |
|
|
17
16
|
|
|
18
17
|
---
|
|
19
18
|
|
|
20
|
-
##
|
|
21
|
-
|
|
22
|
-
- **Node.js ≥ 20.19.0**(`node --version` 检查)
|
|
23
|
-
- **Git**(用于 build 的 worktree 和 done 的分支管理)
|
|
24
|
-
- **AI 编码环境(任选其一或组合)**
|
|
25
|
-
- **Claude Code** — `/specflow:*` 斜杠命令
|
|
26
|
-
- **Cursor** — `specflow:*` 命令(见 Cursor 指南)
|
|
27
|
-
- **OpenAI Codex** — `$specflow-*` 技能(见 Codex 指南)
|
|
19
|
+
## 这是什么
|
|
28
20
|
|
|
29
|
-
|
|
21
|
+
用 AI 写代码时,常见两类问题:
|
|
30
22
|
|
|
31
|
-
|
|
23
|
+
1. **想不清楚就开始写** — 需求模糊、方案没比过、边界没定,返工多
|
|
24
|
+
2. **写完了对不上规格** — 没有可验收的 spec、变更难追溯、棕地项目更难接手
|
|
32
25
|
|
|
33
|
-
|
|
26
|
+
SpecFlow 的解法是把开发拆成**有门禁的阶段**,每个阶段产出可审查的 artifact(文档 + 规格),CLI 负责合并与校验,AI 技能负责按流程执行。
|
|
34
27
|
|
|
35
|
-
```
|
|
36
|
-
|
|
28
|
+
```
|
|
29
|
+
explore(可选)→ propose → refine → apply → review → test → verify → archive
|
|
37
30
|
```
|
|
38
31
|
|
|
39
|
-
|
|
32
|
+
棕地项目(已有代码库)不需要单独的「扫描」命令:用 **explore** 读代码定边界,或在 **propose** 的 Q&A 里描述现有行为 + 本次变更,由 delta spec 建立基线。
|
|
40
33
|
|
|
41
|
-
|
|
42
|
-
npm install -g github:Gordon-Gan-Jiang/specflow
|
|
43
|
-
```
|
|
34
|
+
---
|
|
44
35
|
|
|
45
|
-
|
|
36
|
+
## 核心能力
|
|
46
37
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
38
|
+
| 能力 | 说明 |
|
|
39
|
+
|------|------|
|
|
40
|
+
| **结构化规划** | 一次 propose 产出 proposal、delta specs、design、tasks 四个 artifact |
|
|
41
|
+
| **多轮精化** | refine 内部循环(≥2 轮),攻击性审查假设、边界与 scope |
|
|
42
|
+
| **纪律化构建** | apply 先重写 tasks.md,再逐任务 TDD;design 有漏则回 refine |
|
|
43
|
+
| **双重验收** | verify 对照 delta specs 与主 specs 做回归检查 |
|
|
44
|
+
| **变更归档** | archive 自动 merge delta、移入 archive、可做 git 分支清理 |
|
|
45
|
+
| **跨 IDE 一致** | Claude / Cursor / Codex 共享同一套技能与 prompt,parity 可校验 |
|
|
46
|
+
| **确定性 CLI** | 校验、合并、状态追踪、资产同步 — 不依赖 AI 猜 |
|
|
54
47
|
|
|
55
|
-
|
|
48
|
+
---
|
|
56
49
|
|
|
57
|
-
|
|
50
|
+
## 工作流程
|
|
51
|
+
|
|
52
|
+
### 阶段总览
|
|
58
53
|
|
|
59
|
-
在有源码的机器上打包:
|
|
60
|
-
```bash
|
|
61
|
-
npm run build
|
|
62
|
-
npm pack # 生成 gordon.gan-specflow-1.0.2.tgz
|
|
63
54
|
```
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
55
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
56
|
+
│ explore [可选] 需求模糊时:读代码、比方案、定边界 → explore.md │
|
|
57
|
+
│ ↓ handoff:explore.md Status 必须为 confirmed │
|
|
58
|
+
├─────────────────────────────────────────────────────────────────────────┤
|
|
59
|
+
│ propose 产出 proposal + delta specs + design + tasks │
|
|
60
|
+
│ ↓ │
|
|
61
|
+
│ refine ≥2 轮精化:挑战假设 / 新方案 / 探边界 / 质疑 scope │
|
|
62
|
+
│ ↓ │
|
|
63
|
+
│ apply Phase A 重写 tasks.md → Phase B 逐任务 TDD 执行 │
|
|
64
|
+
│ ↓ │
|
|
65
|
+
│ review → test → verify │
|
|
66
|
+
│ ↓ │
|
|
67
|
+
│ archive delta merge 入主 specs,变更移入 archive/ │
|
|
68
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
69
|
+
|
|
70
|
+
快捷通道:
|
|
71
|
+
fix — 修 Bug:调试 → TDD 修复 → 审查 → 测试 → 归档
|
|
72
|
+
snap — 事后补档:从 git diff 反推变更记录并归档
|
|
67
73
|
```
|
|
68
74
|
|
|
69
|
-
###
|
|
75
|
+
### 变更生命周期(phase)
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
specflow --version # 应输出 1.0.2
|
|
73
|
-
specflow --help
|
|
74
|
-
```
|
|
77
|
+
每个 change 在 `.specflow.yaml` 中追踪 `phase`:
|
|
75
78
|
|
|
76
|
-
|
|
79
|
+
| phase | 含义 | 典型触发 |
|
|
80
|
+
|-------|------|----------|
|
|
81
|
+
| `propose` | 规划阶段(explore / propose) | `specflow change new` 默认值 |
|
|
82
|
+
| `refined` | refine 收敛完成 | refine 结束后 |
|
|
83
|
+
| `apply` | 代码已实现 | apply Phase B 完成后 |
|
|
84
|
+
| `archived` | 已归档 | archive 完成后 |
|
|
77
85
|
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
86
|
+
`specflow change archive` **默认要求** `phase=apply`;可用 `--force` 跳过。老版本 change 若仍写 `plan` / `built`,CLI 读取时会自动映射为 `propose` / `apply`。
|
|
87
|
+
|
|
88
|
+
### explore 门禁
|
|
89
|
+
|
|
90
|
+
- `explore.md` 中 `**Status**: draft` → propose **被阻止**,需先确认方向
|
|
91
|
+
- `**Status**: confirmed` → propose 读取已确认结论并合成 artifact
|
|
92
|
+
- apply / refine 卡住时,可对**子问题**再次 explore(mid-change re-explore)
|
|
83
93
|
|
|
84
94
|
---
|
|
85
95
|
|
|
86
|
-
##
|
|
96
|
+
## 快速开始
|
|
97
|
+
|
|
98
|
+
### 前置依赖
|
|
87
99
|
|
|
88
|
-
|
|
100
|
+
- Node.js **≥ 20.19.0**
|
|
101
|
+
- Git(worktree 与归档分支管理)
|
|
102
|
+
- 任选 AI 编码环境:Claude Code / Cursor / Codex
|
|
103
|
+
|
|
104
|
+
### 安装
|
|
89
105
|
|
|
90
106
|
```bash
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
specflow init --ide codex # 仅 Codex
|
|
94
|
-
specflow init --ide all # Claude + Cursor + Codex
|
|
95
|
-
```
|
|
107
|
+
# 推荐:npm 全局安装
|
|
108
|
+
npm install -g @gordon.gan/specflow
|
|
96
109
|
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
- 写入 `specflow/config.yaml`(项目上下文)
|
|
100
|
-
- 按 `--ide` 生成对应托管资产:
|
|
101
|
-
- **Claude**:`.claude/skills/`、`.claude/commands/specflow/`、`.claude/specflow/`
|
|
102
|
-
- **Cursor**:`.cursor/skills/`、`.cursor/commands/specflow/`、`.cursor/rules/`、`.cursor/specflow/`
|
|
103
|
-
- **Codex**:`.agents/skills/`、`.agents/specflow/`、`AGENTS.md` 上下文块
|
|
104
|
-
- **自动追加** `.gitignore`,忽略可再生的 prompts/schemas/templates(幂等,不覆盖已有内容)
|
|
110
|
+
# 或从 GitHub 安装最新代码
|
|
111
|
+
npm install -g github:Gordon-Gan-Jiang/specflow
|
|
105
112
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
113
|
+
# 验证
|
|
114
|
+
specflow --version # 当前 1.1.0
|
|
115
|
+
specflow --help
|
|
116
|
+
```
|
|
110
117
|
|
|
111
|
-
|
|
118
|
+
开发者本地调试:
|
|
112
119
|
|
|
113
120
|
```bash
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
specflow init
|
|
121
|
+
git clone https://github.com/Gordon-Gan-Jiang/specflow.git
|
|
122
|
+
cd specflow && npm install && npm run build && npm link
|
|
117
123
|
```
|
|
118
124
|
|
|
119
|
-
|
|
125
|
+
### 在项目中初始化
|
|
120
126
|
|
|
121
|
-
|
|
127
|
+
```bash
|
|
128
|
+
cd your-project
|
|
129
|
+
specflow init # 默认:Claude + Cursor
|
|
130
|
+
specflow init --ide codex # 仅 Codex
|
|
131
|
+
specflow init --ide all # Claude + Cursor + Codex
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
init 会创建 `specflow/` 目录、写入 `config.yaml`,并按 `--ide` 生成对应托管资产(skills、commands、prompts 等),同时幂等地追加 `.gitignore` 忽略可再生的 prompts/schemas/templates。
|
|
122
135
|
|
|
123
|
-
|
|
136
|
+
### 跑通第一个变更
|
|
124
137
|
|
|
125
|
-
|
|
138
|
+
**需求已清晰:**
|
|
126
139
|
|
|
127
140
|
```
|
|
128
|
-
/specflow:
|
|
129
|
-
|
|
130
|
-
/specflow:
|
|
131
|
-
|
|
132
|
-
/specflow:
|
|
133
|
-
每轮攻击性审查 + 4 个挑战行为:
|
|
134
|
-
· 挑战假设 · 提新 options
|
|
135
|
-
· 探边界 · 质疑 scope
|
|
136
|
-
可更新任意 artifact(proposal / specs / design / tasks)
|
|
137
|
-
↓
|
|
138
|
-
/specflow:apply Phase A:基于 refine 稳定后的 artifact,用 writing-plans 严格精化(rewrite)tasks.md
|
|
139
|
-
Phase B:逐任务 TDD 执行(subagent 模式)
|
|
140
|
-
design 有漏即停,回 refine 补齐
|
|
141
|
-
↓
|
|
142
|
-
/specflow:review 代码审查(对照 specs 检查回归)
|
|
143
|
-
↓
|
|
144
|
-
/specflow:test 全量测试(单元 + 集成 + E2E + 回归)
|
|
145
|
-
↓
|
|
146
|
-
/specflow:verify 双重校验(delta specs 验收 + 主 specs 回归)
|
|
147
|
-
↓
|
|
148
|
-
/specflow:archive 归档变更 → specs 合并 → git 分支清理
|
|
149
|
-
默认要求 phase=built,可用 --force 跳过
|
|
141
|
+
/specflow:propose "给用户管理模块加批量导入"
|
|
142
|
+
/specflow:refine
|
|
143
|
+
/specflow:apply
|
|
144
|
+
/specflow:verify
|
|
145
|
+
/specflow:archive
|
|
150
146
|
```
|
|
151
147
|
|
|
152
|
-
|
|
148
|
+
**需求模糊:**
|
|
149
|
+
|
|
153
150
|
```
|
|
154
|
-
/specflow:
|
|
155
|
-
|
|
151
|
+
/specflow:explore "不确定用 CSV 还是 Excel,也不清楚现有用户表结构"
|
|
152
|
+
# 确认 explore.md 后:
|
|
153
|
+
/specflow:propose
|
|
154
|
+
/specflow:refine
|
|
155
|
+
...
|
|
156
156
|
```
|
|
157
157
|
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
- **plan 一次产出 4 artifact**:proposal、delta specs、design、tasks 同步生成,每个都是实质的"第一轮深度思考"(first-iteration),不再是占位骨架
|
|
161
|
-
- **refine 内部多轮循环**:至少 2 轮,AI 语义判断收敛,不设上限;每轮显式执行 4 个挑战行为(挑战假设 / 提新 options / 探边界 / 质疑 scope);可更新任意 artifact
|
|
162
|
-
- **build Phase A 改为 rewrite**:不再是"生成" tasks.md,而是基于 refine 稳定后的 artifact 用 Superpowers writing-plans 严格规则"精化"重写;发现 design 缺漏即停并回 refine
|
|
163
|
-
- **`.specflow.yaml` 新增 `phase` 字段**:追踪变更生命周期(`plan` / `refined` / `built` / `archived`);`specflow change archive` 默认要求 `phase=built`,可用 `--force` 跳过守门
|
|
158
|
+
(Cursor 用 `specflow:propose`;Codex 用 `$specflow-propose`,其余类推。)
|
|
164
159
|
|
|
165
160
|
---
|
|
166
161
|
|
|
167
|
-
##
|
|
162
|
+
## 典型场景
|
|
168
163
|
|
|
169
|
-
###
|
|
164
|
+
### 新项目(greenfield)
|
|
170
165
|
|
|
171
|
-
|
|
172
|
-
# 1. 安装(任选一种)
|
|
173
|
-
npm install -g @gordon.gan/specflow
|
|
166
|
+
需求清晰时直接从 propose 开始;每个阶段产出实质内容,refine 多轮打磨后再 apply。
|
|
174
167
|
|
|
175
|
-
|
|
176
|
-
cd my-project
|
|
168
|
+
### 棕地项目(brownfield)
|
|
177
169
|
|
|
178
|
-
|
|
170
|
+
```bash
|
|
179
171
|
specflow init
|
|
180
|
-
|
|
181
|
-
# 4. 打开 Claude Code,在会话里输入(二选一):
|
|
182
|
-
|
|
183
|
-
# 需求已清晰 — 直接 plan:
|
|
184
|
-
/specflow:propose "给用户管理模块加个批量导入功能"
|
|
185
|
-
|
|
186
|
-
# 需求模糊 — 先 explore 再 propose:
|
|
187
|
-
/specflow:explore "批量导入时不确定该用 CSV 还是 Excel,也不清楚现有用户表结构"
|
|
188
|
-
# 确认 explore.md 后:
|
|
189
|
-
/specflow:propose
|
|
190
172
|
```
|
|
191
173
|
|
|
192
|
-
Claude Code 接下来会:
|
|
193
|
-
1. 读 `.claude/skills/specflow-propose/SKILL.md` 编排器
|
|
194
|
-
2. 问你几个澄清问题(一次一个)
|
|
195
|
-
3. 生成 `specflow/changes/bulk-import/proposal.md`
|
|
196
|
-
4. 展示 proposal 等你**确认**
|
|
197
|
-
5. 确认后生成 delta specs `specs/*/spec.md`
|
|
198
|
-
6. 提示你下一步是 `/specflow:refine`
|
|
199
|
-
|
|
200
|
-
### 更完整的示例(4 个场景)
|
|
201
|
-
|
|
202
|
-
#### 场景 1:新项目从零开始(需求已清晰)
|
|
203
|
-
|
|
204
|
-
```
|
|
205
|
-
/specflow:propose "添加用户注册和登录功能"
|
|
206
|
-
/specflow:refine # 讨论技术方案,输出 design.md
|
|
207
|
-
/specflow:apply # TDD 实现,每任务用户确认
|
|
208
|
-
/specflow:review # 代码审查
|
|
209
|
-
/specflow:test # 跑测试
|
|
210
|
-
/specflow:verify # 对照 specs 验收
|
|
211
|
-
/specflow:archive # 归档 + merge
|
|
212
174
|
```
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
```
|
|
217
|
-
/specflow:explore "登录有时返回 500,不确定是 token 校验还是 session 存储的问题"
|
|
218
|
-
# AI 读代码、比方案、产出 explore.md;你确认方向后:
|
|
219
|
-
/specflow:propose # 读取 explore.md,合成 proposal + specs + design + tasks
|
|
175
|
+
/specflow:explore "描述模糊问题或不确定的改法" # 可选
|
|
176
|
+
/specflow:propose "描述已有行为 + 本次要改什么"
|
|
220
177
|
/specflow:refine
|
|
221
178
|
/specflow:apply
|
|
222
179
|
/specflow:archive
|
|
223
180
|
```
|
|
224
181
|
|
|
225
|
-
|
|
182
|
+
在 propose 阶段通过 delta spec 为将要改动的 capability 建立基线,无需单独扫描命令。
|
|
226
183
|
|
|
227
|
-
|
|
228
|
-
cd legacy-project
|
|
229
|
-
specflow init
|
|
184
|
+
### 紧急修 Bug
|
|
230
185
|
|
|
231
|
-
# 在 Claude Code 里:
|
|
232
|
-
# 棕地项目:需求模糊时先 /specflow:explore;或需求清晰时直接 /specflow:propose,
|
|
233
|
-
# 在 proposal Q&A 里描述已有行为 + 新增变更,让 propose 为将要改动的 capability 生成 delta spec 基线。
|
|
234
|
-
/specflow:explore "描述模糊问题或不确定的改法" # 可选
|
|
235
|
-
/specflow:propose "描述已有行为 + 你这次要改的新功能"
|
|
236
|
-
/specflow:refine # 对 propose 产出做 ≥2 轮攻击性审查
|
|
237
|
-
/specflow:apply # Phase A 重写 tasks.md → Phase B TDD
|
|
238
|
-
/specflow:archive # 归档,delta spec 合入主 specs/
|
|
239
186
|
```
|
|
240
|
-
|
|
241
|
-
#### 场景 3:紧急修 Bug
|
|
242
|
-
|
|
243
|
-
```
|
|
244
|
-
/specflow:fix "登录接口在 token 过期时返回 500 而不是 401"
|
|
187
|
+
/specflow:fix "登录接口 token 过期时返回 500 而不是 401"
|
|
245
188
|
```
|
|
246
189
|
|
|
247
|
-
|
|
248
|
-
1. 自动创建轻量变更
|
|
249
|
-
2. 定位相关 specs(对照规格理解预期行为)
|
|
250
|
-
3. 系统化调试(4 步法:调查 → 模式 → 假设 → 验证)
|
|
251
|
-
4. TDD 修复(先写复现测试让它红,再修代码让它绿)
|
|
252
|
-
5. 自动代码审查
|
|
253
|
-
6. 跑测试
|
|
254
|
-
7. 归档
|
|
190
|
+
包含:创建轻量变更 → 对照 specs 调试 → TDD 修复 → 审查 → 测试 → 归档。加 `--urgent` 可跳过审查。
|
|
255
191
|
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
/specflow:fix --urgent "生产环境崩溃"
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
#### 场景 4:同事改了代码没走流程,事后补档
|
|
192
|
+
### 同事没走流程,事后补档
|
|
262
193
|
|
|
263
194
|
```
|
|
264
195
|
/specflow:snap "重构了认证模块"
|
|
265
196
|
```
|
|
266
197
|
|
|
267
|
-
分析 git diff +
|
|
198
|
+
分析 git diff + log,反推变更记录,用户确认后归档。
|
|
268
199
|
|
|
269
200
|
---
|
|
270
201
|
|
|
271
|
-
##
|
|
202
|
+
## IDE 工作流命令
|
|
203
|
+
|
|
204
|
+
共 **10 个**技能,命名因 IDE 而异:
|
|
205
|
+
|
|
206
|
+
| 阶段 | Claude Code | Cursor | Codex |
|
|
207
|
+
|------|-------------|--------|-------|
|
|
208
|
+
| 探索(可选) | `/specflow:explore` | `specflow:explore` | `$specflow-explore` |
|
|
209
|
+
| 规划 | `/specflow:propose` | `specflow:propose` | `$specflow-propose` |
|
|
210
|
+
| 精化 | `/specflow:refine` | `specflow:refine` | `$specflow-refine` |
|
|
211
|
+
| 构建 | `/specflow:apply` | `specflow:apply` | `$specflow-apply` |
|
|
212
|
+
| 审查 | `/specflow:review` | `specflow:review` | `$specflow-review` |
|
|
213
|
+
| 测试 | `/specflow:test` | `specflow:test` | `$specflow-test` |
|
|
214
|
+
| 验收 | `/specflow:verify` | `specflow:verify` | `$specflow-verify` |
|
|
215
|
+
| 归档 | `/specflow:archive` | `specflow:archive` | `$specflow-archive` |
|
|
216
|
+
| 修 Bug | `/specflow:fix` | `specflow:fix` | `$specflow-fix` |
|
|
217
|
+
| 补档 | `/specflow:snap` | `specflow:snap` | `$specflow-snap` |
|
|
218
|
+
|
|
219
|
+
### 各命令职责
|
|
220
|
+
|
|
221
|
+
| 命令 | 做什么 |
|
|
222
|
+
|------|--------|
|
|
223
|
+
| **explore** | 读代码、比方案、定边界;产出 `explore.md`,confirmed 后 handoff 到 propose |
|
|
224
|
+
| **propose** | 一次产出 proposal、delta specs、design、tasks(第一轮深度思考,非占位骨架) |
|
|
225
|
+
| **refine** | 内部多轮循环(≥2 轮,AI 判断收敛);可更新任意 artifact |
|
|
226
|
+
| **apply** | Phase A 用 writing-plans 规则重写 tasks.md;Phase B subagent TDD 逐任务执行 |
|
|
227
|
+
| **review** | 代码审查,对照 specs 检查回归 |
|
|
228
|
+
| **test** | 单元 + 集成 + E2E + 回归测试 |
|
|
229
|
+
| **verify** | Pass 1:delta specs 验收;Pass 2:主 specs 回归(无基线时显式 skipped) |
|
|
230
|
+
| **archive** | 归档变更、delta merge、git 分支清理;默认要求 phase=apply |
|
|
231
|
+
| **fix** | 修 Bug 一条龙 |
|
|
232
|
+
| **snap** | 从 git 历史反推变更并归档 |
|
|
233
|
+
|
|
234
|
+
> **v1.0.1 起命令已重命名**(对齐 OpenSpec 术语):`plan→propose`、`build→apply`、`done→archive`。`.specflow.yaml` 的 phase 枚举同步为 `propose/refined/apply/archived`(读取时兼容旧值 `plan`/`built`)。
|
|
272
235
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
| 命令 | 说明 |
|
|
276
|
-
|---|---|
|
|
277
|
-
| `/specflow:explore` | **需求模糊时** 先探索:读代码、比方案、定边界,产出 `explore.md`,再 handoff 到 propose |
|
|
278
|
-
| `/specflow:propose` | 需求规划:生成 proposal + delta specs |
|
|
279
|
-
| `/specflow:refine` | 技术方案探讨(brainstorming + design.md) |
|
|
280
|
-
| `/specflow:apply` | 两阶段构建:生成计划 → subagent TDD 执行 |
|
|
281
|
-
| `/specflow:review` | 代码审查(含 specs 回归检查) |
|
|
282
|
-
| `/specflow:test` | 全量测试 + 验证(单元/集成/E2E/回归) |
|
|
283
|
-
| `/specflow:verify` | 双重校验:delta specs 验收 + 主 specs 回归 |
|
|
284
|
-
| `/specflow:archive` | 归档变更 + specs 合并 + git 分支清理 |
|
|
285
|
-
| `/specflow:fix` | 修 Bug 快速通道(调试 → TDD → 归档) |
|
|
286
|
-
| `/specflow:snap` | 事后补档(从 git diff 反推变更记录) |
|
|
287
|
-
|
|
288
|
-
### CLI 命令(在终端里用)
|
|
236
|
+
---
|
|
289
237
|
|
|
290
|
-
|
|
291
|
-
|---|---|
|
|
292
|
-
| `specflow init` | 初始化项目(生成目录、技能、prompts) |
|
|
293
|
-
| `specflow change new <名称>` | 创建新的变更 |
|
|
294
|
-
| `specflow change status <名称>` | 查看变更的 artifact 完成状态 |
|
|
295
|
-
| `specflow change archive <名称>` | 归档变更(delta merge + 移入 archive) |
|
|
296
|
-
| `specflow validate <文件>` | 校验 spec 文件格式 |
|
|
297
|
-
| `specflow instructions <artifact> <change>` | 查看某个 artifact 的创建指令 |
|
|
238
|
+
## CLI 命令
|
|
298
239
|
|
|
299
|
-
CLI
|
|
240
|
+
CLI 从当前目录**向上查找**项目根(识别 `specflow/config.yaml`),类似 `git` 行为。
|
|
300
241
|
|
|
301
|
-
|
|
242
|
+
### 项目初始化
|
|
302
243
|
|
|
303
|
-
|
|
244
|
+
| 命令 | 说明 |
|
|
245
|
+
|------|------|
|
|
246
|
+
| `specflow init [--ide claude\|cursor\|codex\|both\|all]` | 初始化项目目录与 IDE 托管资产 |
|
|
247
|
+
| `specflow sync [--ide ...] [--no-parity-strict]` | 从已安装的 specflow 包同步/更新 IDE 资产(升级后用) |
|
|
248
|
+
| `specflow doctor [--parity] [--json]` | 诊断 IDE 资产是否完整、迁移状态是否正常 |
|
|
249
|
+
| `specflow parity-report [--json]` | 对比 Claude / Cursor / Codex 能力是否一致 |
|
|
304
250
|
|
|
305
|
-
|
|
251
|
+
### 变更管理
|
|
306
252
|
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
│ SKILL.md 层(编排层) │
|
|
315
|
-
│ 每个命令一个 SKILL.md(50-100 行)。 │
|
|
316
|
-
│ 定义工作流阶段、hard gate 门禁、用户确认点。 │
|
|
317
|
-
│ 通过 Read 指令按需加载 prompt 文件。 │
|
|
318
|
-
├─────────────────────────────────────────────────┤
|
|
319
|
-
│ Prompts 层(执行指令) │
|
|
320
|
-
│ 详细的指令文件,告诉 Claude Code 在每个阶段 │
|
|
321
|
-
│ 具体怎么做:写 proposal、做 brainstorming、 │
|
|
322
|
-
│ 执行 TDD、做 code review 等。 │
|
|
323
|
-
│ 按需加载,不会一次全部塞进 context。 │
|
|
324
|
-
└─────────────────────────────────────────────────┘
|
|
325
|
-
```
|
|
253
|
+
| 命令 | 说明 |
|
|
254
|
+
|------|------|
|
|
255
|
+
| `specflow change new <名称>` | 创建新变更(`.specflow.yaml` 默认 `phase: propose`) |
|
|
256
|
+
| `specflow change status <名称>` | 查看 artifact 完成状态 |
|
|
257
|
+
| `specflow change phase <名称>` | 查看当前 phase |
|
|
258
|
+
| `specflow change phase <名称> --set <phase>` | 设置 phase(`propose \| refined \| apply \| archived`) |
|
|
259
|
+
| `specflow change archive <名称> [--force]` | 归档变更;`--force` 跳过 phase=apply 门禁 |
|
|
326
260
|
|
|
327
|
-
|
|
261
|
+
### 规格与指令
|
|
328
262
|
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
263
|
+
| 命令 | 说明 |
|
|
264
|
+
|------|------|
|
|
265
|
+
| `specflow validate <文件>` | 校验 spec 文件格式(WHEN/THEN scenario 等) |
|
|
266
|
+
| `specflow instructions <artifact> <change>` | 查看某 artifact 的创建指令 |
|
|
332
267
|
|
|
333
268
|
---
|
|
334
269
|
|
|
335
270
|
## 关键概念
|
|
336
271
|
|
|
337
|
-
### Specs
|
|
338
|
-
|
|
339
|
-
存放在 `specflow/specs/` 目录,是项目的 **Source of Truth(唯一事实来源)**。
|
|
272
|
+
### Specs — 唯一事实来源
|
|
340
273
|
|
|
341
|
-
|
|
274
|
+
存放在 `specflow/specs/`,描述各 capability 的行为规格:
|
|
342
275
|
|
|
343
276
|
```markdown
|
|
344
277
|
### Requirement: 用户登录
|
|
@@ -347,110 +280,143 @@ SpecFlow 分三层,各司其职:
|
|
|
347
280
|
#### Scenario: 登录成功
|
|
348
281
|
- **WHEN** 用户提交有效凭据
|
|
349
282
|
- **THEN** 系统返回认证 token
|
|
350
|
-
|
|
351
|
-
#### Scenario: 登录失败
|
|
352
|
-
- **WHEN** 用户提交错误密码
|
|
353
|
-
- **THEN** 系统返回 401 错误
|
|
354
283
|
```
|
|
355
284
|
|
|
356
|
-
### Changes
|
|
357
|
-
|
|
358
|
-
存放在 `specflow/changes/` 目录。每次新功能或修复都是一个 change。
|
|
285
|
+
### Changes — 一次功能或修复
|
|
359
286
|
|
|
360
|
-
|
|
361
|
-
- `proposal.md` — 为什么做、做什么
|
|
362
|
-
- `specs/` — delta specs(ADDED/MODIFIED/REMOVED/RENAMED 的需求变更)
|
|
363
|
-
- `design.md` — 技术方案
|
|
364
|
-
- `tasks.md` — 实施任务清单(带 checkbox)
|
|
287
|
+
存放在 `specflow/changes/<name>/`:
|
|
365
288
|
|
|
366
|
-
|
|
289
|
+
| 文件 | 作用 |
|
|
290
|
+
|------|------|
|
|
291
|
+
| `explore.md` | 可选;探索结论,Status 控制 propose 门禁 |
|
|
292
|
+
| `proposal.md` | 为什么做、做什么 |
|
|
293
|
+
| `specs/` | delta specs(对主 specs 的增量变更) |
|
|
294
|
+
| `design.md` | 技术方案 |
|
|
295
|
+
| `tasks.md` | 实施任务清单(带 checkbox) |
|
|
296
|
+
| `.specflow.yaml` | 变更元数据(含 phase) |
|
|
367
297
|
|
|
368
|
-
|
|
298
|
+
归档后 delta 自动 merge 进 `specflow/specs/`,change 移入 `specflow/changes/archive/`。
|
|
369
299
|
|
|
370
|
-
|
|
300
|
+
### Delta Specs — 四种操作
|
|
371
301
|
|
|
372
302
|
```markdown
|
|
373
|
-
## ADDED Requirements
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
##
|
|
377
|
-
(修改的需求 — 必须包含完整更新内容)
|
|
378
|
-
|
|
379
|
-
## REMOVED Requirements
|
|
380
|
-
(删除的需求 — 必须说明原因和迁移方案)
|
|
381
|
-
|
|
382
|
-
## RENAMED Requirements
|
|
383
|
-
(重命名 — FROM: 旧名 / TO: 新名)
|
|
303
|
+
## ADDED Requirements # 新增
|
|
304
|
+
## MODIFIED Requirements # 修改(须写完整更新内容)
|
|
305
|
+
## REMOVED Requirements # 删除(须说明原因与迁移)
|
|
306
|
+
## RENAMED Requirements # 重命名(FROM / TO)
|
|
384
307
|
```
|
|
385
308
|
|
|
386
309
|
---
|
|
387
310
|
|
|
388
|
-
##
|
|
311
|
+
## 目录结构
|
|
389
312
|
|
|
390
|
-
`specflow init`
|
|
313
|
+
`specflow init` 后项目新增(按 `--ide` 不同,IDE 目录有所差异):
|
|
391
314
|
|
|
392
315
|
```
|
|
393
316
|
your-project/
|
|
394
|
-
├── specflow/
|
|
395
|
-
│ ├── config.yaml
|
|
396
|
-
│ ├── specs/
|
|
397
|
-
│
|
|
398
|
-
│
|
|
399
|
-
│
|
|
400
|
-
│
|
|
401
|
-
│
|
|
402
|
-
│
|
|
403
|
-
│
|
|
317
|
+
├── specflow/ # 规格与变更(应纳入 git)
|
|
318
|
+
│ ├── config.yaml
|
|
319
|
+
│ ├── specs/ # 主 specs(Source of Truth)
|
|
320
|
+
│ └── changes/
|
|
321
|
+
│ ├── <name>/ # 活跃变更
|
|
322
|
+
│ │ ├── explore.md # 可选
|
|
323
|
+
│ │ ├── proposal.md
|
|
324
|
+
│ │ ├── specs/
|
|
325
|
+
│ │ ├── design.md
|
|
326
|
+
│ │ ├── tasks.md
|
|
327
|
+
│ │ └── .specflow.yaml
|
|
328
|
+
│ └── archive/ # 已归档变更
|
|
329
|
+
│
|
|
330
|
+
├── .claude/ # Claude Code(--ide 含 claude 时)
|
|
331
|
+
│ ├── skills/specflow-*/
|
|
332
|
+
│ ├── commands/specflow/
|
|
333
|
+
│ └── specflow/ # prompts/schemas/templates(可再生,gitignore)
|
|
334
|
+
│
|
|
335
|
+
├── .cursor/ # Cursor(--ide 含 cursor 时)
|
|
336
|
+
│ ├── skills/specflow-*/
|
|
337
|
+
│ ├── commands/specflow/
|
|
338
|
+
│ └── specflow/
|
|
404
339
|
│
|
|
405
|
-
└── .
|
|
406
|
-
├── skills/specflow-*/
|
|
407
|
-
|
|
408
|
-
└── specflow/ # 资源文件(.gitignore 自动忽略)
|
|
409
|
-
├── prompts/
|
|
410
|
-
├── schemas/
|
|
411
|
-
└── templates/
|
|
340
|
+
└── .agents/ # Codex(--ide 含 codex 时)
|
|
341
|
+
├── skills/specflow-*/
|
|
342
|
+
└── specflow/
|
|
412
343
|
```
|
|
413
344
|
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
-
|
|
345
|
+
**Git 建议:**
|
|
346
|
+
|
|
347
|
+
- **跟踪**:`specflow/`、各 IDE 的 `skills/` 与 `commands/specflow/`
|
|
348
|
+
- **忽略**:各 IDE 下可再生的 `specflow/{prompts,schemas,templates}/`(init 自动追加)
|
|
417
349
|
|
|
418
350
|
---
|
|
419
351
|
|
|
420
|
-
##
|
|
352
|
+
## 架构
|
|
353
|
+
|
|
354
|
+
三层分离,各司其职:
|
|
355
|
+
|
|
356
|
+
```
|
|
357
|
+
┌──────────────────────────────────────────────┐
|
|
358
|
+
│ CLI 层(TypeScript,确定性) │
|
|
359
|
+
│ 文件操作、校验、delta merge、归档、资产同步 │
|
|
360
|
+
├──────────────────────────────────────────────┤
|
|
361
|
+
│ SKILL.md 层(编排) │
|
|
362
|
+
│ 阶段划分、hard gate、用户确认点、按需加载 prompt │
|
|
363
|
+
├──────────────────────────────────────────────┤
|
|
364
|
+
│ Prompts 层(执行指令) │
|
|
365
|
+
│ 各阶段具体操作:写 proposal、TDD、审查等 │
|
|
366
|
+
└──────────────────────────────────────────────┘
|
|
367
|
+
```
|
|
421
368
|
|
|
422
|
-
|
|
369
|
+
- **渐进加载**:SKILL.md 保持精简,prompt 按阶段 Read,避免 context 膨胀
|
|
370
|
+
- **Hard Gate 双重声明**:编排层与 prompt 层同时约束关键门禁
|
|
371
|
+
- **CLI 不做 AI 逻辑**:文本合并与格式校验由代码精确执行
|
|
423
372
|
|
|
424
|
-
|
|
425
|
-
- 检查 `npm config get prefix` 下的 `bin` 目录是否在 PATH 里
|
|
373
|
+
---
|
|
426
374
|
|
|
427
|
-
|
|
375
|
+
## 维护与升级
|
|
428
376
|
|
|
429
|
-
|
|
430
|
-
- 你在一个跑过 `specflow init` 的项目目录里(或其子目录)
|
|
431
|
-
- `specflow/config.yaml` 存在
|
|
377
|
+
升级全局 specflow 后,在项目里同步资产:
|
|
432
378
|
|
|
433
|
-
|
|
379
|
+
```bash
|
|
380
|
+
specflow sync --ide all
|
|
381
|
+
```
|
|
434
382
|
|
|
435
|
-
|
|
383
|
+
检查资产健康与跨 IDE 一致性:
|
|
436
384
|
|
|
437
|
-
|
|
385
|
+
```bash
|
|
386
|
+
specflow doctor --parity
|
|
387
|
+
specflow parity-report
|
|
388
|
+
```
|
|
389
|
+
|
|
390
|
+
重新初始化(init 检测到已初始化会拒绝,需先删除 `specflow/config.yaml` 等标记文件):
|
|
438
391
|
|
|
439
|
-
SpecFlow 需要 Node ≥ 20.19.0。用 `nvm` 切版本:
|
|
440
392
|
```bash
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
npm install -g @gordon.gan/specflow
|
|
393
|
+
rm -rf specflow/config.yaml .claude/specflow/ # 按需清理其他 IDE 目录
|
|
394
|
+
specflow init
|
|
444
395
|
```
|
|
445
396
|
|
|
446
397
|
---
|
|
447
398
|
|
|
399
|
+
## 故障排查
|
|
400
|
+
|
|
401
|
+
| 现象 | 处理 |
|
|
402
|
+
|------|------|
|
|
403
|
+
| `specflow: command not found` | 确认 `npm install -g` 成功;检查 `npm config get prefix`/bin 是否在 PATH |
|
|
404
|
+
| `No specflow project found` | 确认已 `specflow init` 且 `specflow/config.yaml` 存在 |
|
|
405
|
+
| `Change "xxx" already exists` | 换名称或先归档已有变更 |
|
|
406
|
+
| propose 被 explore 阻止 | 将 `explore.md` 的 `**Status**` 改为 `confirmed` |
|
|
407
|
+
| archive 拒绝(phase 不对) | 完成 apply 使 phase=apply,或 `specflow change archive --force` |
|
|
408
|
+
| Node 版本不兼容 | 需要 ≥ 20.19.0:`nvm install 20 && nvm use 20` |
|
|
409
|
+
| parity-report FAIL | 运行 `specflow sync --ide all` 后重试 `specflow doctor --parity` |
|
|
410
|
+
|
|
411
|
+
---
|
|
412
|
+
|
|
448
413
|
## 来源与许可
|
|
449
414
|
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
- [
|
|
415
|
+
基于两个开源项目(均为 MIT):
|
|
416
|
+
|
|
417
|
+
- [OpenSpec](https://github.com/Fission-AI/OpenSpec) — artifact graph、delta merge、validation
|
|
418
|
+
- [Superpowers](https://github.com/obra/superpowers) — brainstorming、TDD、debugging、code review
|
|
453
419
|
|
|
454
|
-
|
|
420
|
+
来源内容已按 SpecFlow 风格改写,通过 `<!-- SOURCE: ... -->` 标注出处。
|
|
455
421
|
|
|
456
422
|
**许可证:MIT**
|