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