@lininn/openflow 0.1.8 → 0.2.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 +7 -0
- package/README.zh-CN.md +7 -0
- package/dist/cli/index.js +1 -1
- package/dist/cli/init.js +1 -0
- package/dist/cli/status.js +1 -1
- package/dist/core/skill-generator.js +37 -6
- package/package.json +1 -1
- package/templates/SKILL.md +36 -5
- package/templates/amend.md +136 -0
- package/templates/brainstorming.md +7 -0
- package/templates/build.md +8 -1
- package/templates/close.md +5 -0
- package/templates/proposal.md +7 -0
- package/templates/spec.md +5 -0
package/README.md
CHANGED
|
@@ -65,6 +65,7 @@ Re-generates project skills after upgrading the npm package.
|
|
|
65
65
|
| `/openflow proposal` | proposal | Lightweight capture — 3-5 questions to converge on requirements |
|
|
66
66
|
| `/openflow brainstorming` | brainstorming | Deep design — multi-round tradeoff exploration |
|
|
67
67
|
| `/openflow spec` | spec | Call OpenSpec to generate specs + auto-translate to plan-ready.md |
|
|
68
|
+
| `/openflow amend` | amend | Revise requirements/specs before close and update plan-ready.md |
|
|
68
69
|
| `/openflow build` | build | Call Superpowers to execute implementation |
|
|
69
70
|
| `/openflow close` | close | Verify consistency + archive |
|
|
70
71
|
|
|
@@ -117,6 +118,12 @@ User Requirements
|
|
|
117
118
|
└──────────┬───────────┘
|
|
118
119
|
│
|
|
119
120
|
┌──────────▼───────────┐
|
|
121
|
+
│ /openflow amend │
|
|
122
|
+
│ Requirement revision │
|
|
123
|
+
│ (only when needed) │
|
|
124
|
+
└──────────┬───────────┘
|
|
125
|
+
│
|
|
126
|
+
┌──────────▼───────────┐
|
|
120
127
|
│ /openflow close │
|
|
121
128
|
│ Verify + archive │
|
|
122
129
|
└──────────────────────┘
|
package/README.zh-CN.md
CHANGED
|
@@ -65,6 +65,7 @@ openflow update
|
|
|
65
65
|
| `/openflow proposal` | proposal | 轻量提问,3-5 问快速收敛需求 |
|
|
66
66
|
| `/openflow brainstorming` | brainstorming | 深度设计,多轮方案探索 |
|
|
67
67
|
| `/openflow spec` | spec | 调用 OpenSpec 生成规格 + 自动翻译 |
|
|
68
|
+
| `/openflow amend` | amend | close 前修订需求/规格并更新 plan-ready.md |
|
|
68
69
|
| `/openflow build` | build | 调用 Superpowers 执行实现 |
|
|
69
70
|
| `/openflow close` | close | 验证一致性 + 归档 |
|
|
70
71
|
|
|
@@ -117,6 +118,12 @@ Works without them: yes, with manual-file fallback
|
|
|
117
118
|
└──────────┬───────────┘
|
|
118
119
|
│
|
|
119
120
|
┌──────────▼───────────┐
|
|
121
|
+
│ /openflow amend │
|
|
122
|
+
│ 需求变更修订 │
|
|
123
|
+
│ (仅需要时) │
|
|
124
|
+
└──────────┬───────────┘
|
|
125
|
+
│
|
|
126
|
+
┌──────────▼───────────┐
|
|
120
127
|
│ /openflow close │
|
|
121
128
|
│ 验证一致性 + 归档 │
|
|
122
129
|
└──────────────────────┘
|
package/dist/cli/index.js
CHANGED
|
@@ -7,7 +7,7 @@ export function run() {
|
|
|
7
7
|
program
|
|
8
8
|
.name('openflow')
|
|
9
9
|
.description('OpenSpec + Superpowers workflow orchestrator')
|
|
10
|
-
.version('0.1.
|
|
10
|
+
.version('0.1.9');
|
|
11
11
|
program.addCommand(initCommand);
|
|
12
12
|
program.addCommand(statusCommand);
|
|
13
13
|
program.addCommand(updateCommand);
|
package/dist/cli/init.js
CHANGED
|
@@ -108,6 +108,7 @@ export const initCommand = new Command('init')
|
|
|
108
108
|
logger.info(' /openflow proposal Quick requirement capture');
|
|
109
109
|
logger.info(' /openflow brainstorming Deep design exploration');
|
|
110
110
|
logger.info(' /openflow spec Generate specs + translate');
|
|
111
|
+
logger.info(' /openflow amend Revise requirements before close');
|
|
111
112
|
logger.info(' /openflow build Execute implementation');
|
|
112
113
|
logger.info(' /openflow close Verify + archive');
|
|
113
114
|
logger.blank();
|
package/dist/cli/status.js
CHANGED
|
@@ -64,7 +64,7 @@ export const statusCommand = new Command('status')
|
|
|
64
64
|
const hasProposal = fs.existsSync(path.join(changeDir, 'proposal.md'));
|
|
65
65
|
let status = '';
|
|
66
66
|
if (hasPlanReady) {
|
|
67
|
-
status = '→ ready for /openflow build';
|
|
67
|
+
status = '→ ready for /openflow build or /openflow amend';
|
|
68
68
|
}
|
|
69
69
|
else if (hasProposal) {
|
|
70
70
|
status = '→ needs /openflow spec';
|
|
@@ -29,7 +29,7 @@ export function generateSkills(options) {
|
|
|
29
29
|
// Generate main SKILL.md
|
|
30
30
|
generateSkillFile(skillsDir, 'SKILL.md', depStatus);
|
|
31
31
|
// Generate phase files
|
|
32
|
-
const phases = ['proposal', 'brainstorming', 'spec', 'build', 'close'];
|
|
32
|
+
const phases = ['proposal', 'brainstorming', 'spec', 'amend', 'build', 'close'];
|
|
33
33
|
for (const phase of phases) {
|
|
34
34
|
generateSkillFile(skillsDir, `${phase}.md`, depStatus);
|
|
35
35
|
}
|
|
@@ -100,13 +100,40 @@ function getInlineTemplate(filename, depStatus) {
|
|
|
100
100
|
const templates = {
|
|
101
101
|
'SKILL.md': `---
|
|
102
102
|
name: openflow
|
|
103
|
-
description: "OpenSpec + Superpowers 工作流协调器。使用 /openflow proposal 轻量提问、/openflow brainstorming 深度设计、/openflow spec 生成规格、/openflow build 执行实现、/openflow close 验证归档。串联需求规格与工程执行,消除格式鸿沟。"
|
|
103
|
+
description: "OpenSpec + Superpowers 工作流协调器。使用 /openflow proposal 轻量提问、/openflow brainstorming 深度设计、/openflow spec 生成规格、/openflow amend 在归档前修订需求、/openflow build 执行实现、/openflow close 验证归档。串联需求规格与工程执行,消除格式鸿沟。"
|
|
104
104
|
---
|
|
105
105
|
|
|
106
106
|
# openflow - 工作流协调器
|
|
107
107
|
|
|
108
108
|
根据用户调用的子命令和项目当前状态,路由到对应阶段。
|
|
109
109
|
|
|
110
|
+
## 续接与中断恢复
|
|
111
|
+
|
|
112
|
+
如果本轮没有显式 \`/openflow ...\` 子命令,但上一轮已经进入 openflow 任一阶段,并且用户是在补充范围、回答确认问题、说“继续”、修正需求、或说明新增/移除边界:
|
|
113
|
+
|
|
114
|
+
1. 默认继续上一 openflow 阶段,不把该回复当作普通编码请求
|
|
115
|
+
2. 如果上一阶段是 proposal、brainstorming、spec 或 amend,只能继续产出/更新 OpenSpec 文档和计划文档,不得修改任何代码或实现文件
|
|
116
|
+
3. 如果上一阶段是 build,但用户补充的是需求、验收条件或规格边界变更,切到 \`/openflow amend\`,不要直接改代码
|
|
117
|
+
4. 只有用户显式调用 \`/openflow build\`,或状态检测明确进入 build 阶段后,才允许修改代码或实现文件
|
|
118
|
+
5. 中断后恢复时,先重新读取当前阶段文件和 \`openspec/changes/\` 状态,再继续执行
|
|
119
|
+
|
|
120
|
+
典型场景:
|
|
121
|
+
- proposal 阶段整理需求后,用户补充“运营端也要做回显”。这仍是需求范围修正,必须继续 proposal 文档收敛,不能直接进入代码实现。
|
|
122
|
+
- brainstorming 阶段询问“是否只覆盖企业端?”后,用户回复“运营端也要做回显”。这仍是设计范围修正,必须继续 brainstorming/proposal 文档收敛,不能直接进入代码实现。
|
|
123
|
+
|
|
124
|
+
## 阶段写入边界
|
|
125
|
+
|
|
126
|
+
| 阶段 | 允许写入 | 禁止写入 |
|
|
127
|
+
|------|----------|----------|
|
|
128
|
+
| proposal | \`openspec/changes/**/proposal.md\` | 任何代码或实现文件 |
|
|
129
|
+
| brainstorming | \`openspec/changes/**/proposal.md\` | 任何代码或实现文件 |
|
|
130
|
+
| spec | \`openspec/changes/**\`、\`plan-ready.md\` | 任何代码或实现文件 |
|
|
131
|
+
| amend | \`openspec/changes/**\`、\`plan-ready.md\`、\`docs/superpowers/plans/*.md\` | 代码、测试、其他实现文件 |
|
|
132
|
+
| build | 代码、测试、实现计划状态 | 规格文档(除非另开变更) |
|
|
133
|
+
| close | 归档、验证记录、\`close-issues.md\` | 代码、测试、其他实现文件 |
|
|
134
|
+
|
|
135
|
+
如果用户在 proposal/brainstorming/spec/amend 阶段提出“就按这个做”“范围改成 X”“继续”等话术,不代表进入 build;必须先完成该阶段文档产物并提示下一步。
|
|
136
|
+
|
|
110
137
|
## 子命令
|
|
111
138
|
|
|
112
139
|
| 命令 | 阶段 | 说明 |
|
|
@@ -114,6 +141,7 @@ description: "OpenSpec + Superpowers 工作流协调器。使用 /openflow propo
|
|
|
114
141
|
| \`/openflow proposal\` | proposal | 轻量提问,快速收敛需求 |
|
|
115
142
|
| \`/openflow brainstorming\` | brainstorming | 深度设计,多轮探索 |
|
|
116
143
|
| \`/openflow spec\` | spec | 调用 OpenSpec 生成规格 + 翻译 |
|
|
144
|
+
| \`/openflow amend\` | amend | build/close 前受控修改需求、规格和计划 |
|
|
117
145
|
| \`/openflow build\` | build | 调用 Superpowers 执行实现 |
|
|
118
146
|
| \`/openflow close\` | close | 验证一致性 + 归档 |
|
|
119
147
|
|
|
@@ -139,10 +167,12 @@ description: "OpenSpec + Superpowers 工作流协调器。使用 /openflow propo
|
|
|
139
167
|
|
|
140
168
|
根据子命令或状态检测结果,读取对应阶段文件并执行:
|
|
141
169
|
|
|
142
|
-
1.
|
|
143
|
-
2.
|
|
144
|
-
3.
|
|
145
|
-
4.
|
|
170
|
+
1. 如果这是上一 openflow 阶段的续接回复,先按“续接与中断恢复”保持阶段
|
|
171
|
+
2. 如果用户在 build 中明确提出需求变更、补充 spec、修改验收条件或重新生成规格,路由到 amend
|
|
172
|
+
3. 如果用户指定了子命令(如 \`/openflow build\`),优先按指定阶段执行,但检查前置条件
|
|
173
|
+
4. 如果用户只输入 \`/openflow\`,执行状态检测,自动路由到对应阶段
|
|
174
|
+
5. 读取当前 openflow skill 目录下的阶段文件:\`<阶段>.md\`(与本 \`SKILL.md\` 同目录;不要依赖 Claude 专属环境变量)
|
|
175
|
+
6. 按阶段文件中的流程执行,并遵守阶段写入边界
|
|
146
176
|
|
|
147
177
|
### 前置条件检查
|
|
148
178
|
|
|
@@ -151,6 +181,7 @@ description: "OpenSpec + Superpowers 工作流协调器。使用 /openflow propo
|
|
|
151
181
|
| proposal | 无 | — |
|
|
152
182
|
| brainstorming | 无 | — |
|
|
153
183
|
| spec | 需要有活跃变更目录或有用户需求 | "请先用 /openflow proposal 或 /openflow brainstorming 描述需求" |
|
|
184
|
+
| amend | 需要有活跃变更目录,通常需要 plan-ready.md | "还没有可修订的活跃变更,请先完成 /openflow spec" |
|
|
154
185
|
| build | 需要存在 plan-ready.md | "请先完成 /openflow spec 生成规格和翻译" |
|
|
155
186
|
| close | 需要实现已完成 | "实现尚未完成,请先用 /openflow build 执行" |
|
|
156
187
|
`,
|
package/package.json
CHANGED
package/templates/SKILL.md
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: openflow
|
|
3
|
-
description: "OpenSpec + Superpowers workflow orchestrator. Use /openflow proposal for quick capture, /openflow brainstorming for deep design, /openflow spec to generate specs + translate, /openflow build to execute, /openflow close to verify and archive. Bridges requirements specs and engineering execution."
|
|
3
|
+
description: "OpenSpec + Superpowers workflow orchestrator. Use /openflow proposal for quick capture, /openflow brainstorming for deep design, /openflow spec to generate specs + translate, /openflow amend to revise requirements before close, /openflow build to execute, /openflow close to verify and archive. Bridges requirements specs and engineering execution."
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# openflow - 工作流协调器
|
|
7
7
|
|
|
8
8
|
根据用户调用的子命令和项目当前状态,路由到对应阶段。
|
|
9
9
|
|
|
10
|
+
## 续接与中断恢复
|
|
11
|
+
|
|
12
|
+
如果本轮没有显式 `/openflow ...` 子命令,但上一轮已经进入 openflow 任一阶段,并且用户是在补充范围、回答确认问题、说“继续”、修正需求、或说明新增/移除边界:
|
|
13
|
+
|
|
14
|
+
1. 默认继续上一 openflow 阶段,不把该回复当作普通编码请求
|
|
15
|
+
2. 如果上一阶段是 proposal、brainstorming、spec 或 amend,只能继续产出/更新 OpenSpec 文档和计划文档,不得修改任何代码或实现文件
|
|
16
|
+
3. 如果上一阶段是 build,但用户补充的是需求、验收条件或规格边界变更,切到 `/openflow amend`,不要直接改代码
|
|
17
|
+
4. 只有用户显式调用 `/openflow build`,或状态检测明确进入 build 阶段后,才允许修改代码或实现文件
|
|
18
|
+
5. 中断后恢复时,先重新读取当前阶段文件和 `openspec/changes/` 状态,再继续执行
|
|
19
|
+
|
|
20
|
+
典型场景:
|
|
21
|
+
- proposal 阶段整理需求后,用户补充“运营端也要做回显”。这仍是需求范围修正,必须继续 proposal 文档收敛,不能直接进入代码实现。
|
|
22
|
+
- brainstorming 阶段询问“是否只覆盖企业端?”后,用户回复“运营端也要做回显”。这仍是设计范围修正,必须继续 brainstorming/proposal 文档收敛,不能直接进入代码实现。
|
|
23
|
+
|
|
24
|
+
## 阶段写入边界
|
|
25
|
+
|
|
26
|
+
| 阶段 | 允许写入 | 禁止写入 |
|
|
27
|
+
|------|----------|----------|
|
|
28
|
+
| proposal | `openspec/changes/**/proposal.md` | 任何代码或实现文件 |
|
|
29
|
+
| brainstorming | `openspec/changes/**/proposal.md` | 任何代码或实现文件 |
|
|
30
|
+
| spec | `openspec/changes/**`、`plan-ready.md` | 任何代码或实现文件 |
|
|
31
|
+
| amend | `openspec/changes/**`、`plan-ready.md`、`docs/superpowers/plans/*.md` | 代码、测试、其他实现文件 |
|
|
32
|
+
| build | 代码、测试、实现计划状态 | 规格文档(除非另开变更) |
|
|
33
|
+
| close | 归档、验证记录、`close-issues.md` | 代码、测试、其他实现文件 |
|
|
34
|
+
|
|
35
|
+
如果用户在 proposal/brainstorming/spec/amend 阶段提出“就按这个做”“范围改成 X”“继续”等话术,不代表进入 build;必须先完成该阶段文档产物并提示下一步。
|
|
36
|
+
|
|
10
37
|
## 子命令
|
|
11
38
|
|
|
12
39
|
| 命令 | 阶段 | 说明 |
|
|
@@ -14,6 +41,7 @@ description: "OpenSpec + Superpowers workflow orchestrator. Use /openflow propos
|
|
|
14
41
|
| `/openflow proposal` | proposal | 轻量提问,快速收敛需求 |
|
|
15
42
|
| `/openflow brainstorming` | brainstorming | 深度设计,多轮探索 |
|
|
16
43
|
| `/openflow spec` | spec | 调用 OpenSpec 生成规格 + 翻译 |
|
|
44
|
+
| `/openflow amend` | amend | build/close 前受控修改需求、规格和计划 |
|
|
17
45
|
| `/openflow build` | build | 调用 Superpowers 执行实现 |
|
|
18
46
|
| `/openflow close` | close | 验证一致性 + 归档 |
|
|
19
47
|
|
|
@@ -39,10 +67,12 @@ description: "OpenSpec + Superpowers workflow orchestrator. Use /openflow propos
|
|
|
39
67
|
|
|
40
68
|
根据子命令或状态检测结果,读取对应阶段文件并执行:
|
|
41
69
|
|
|
42
|
-
1.
|
|
43
|
-
2.
|
|
44
|
-
3.
|
|
45
|
-
4.
|
|
70
|
+
1. 如果这是上一 openflow 阶段的续接回复,先按“续接与中断恢复”保持阶段
|
|
71
|
+
2. 如果用户在 build 中明确提出需求变更、补充 spec、修改验收条件或重新生成规格,路由到 amend
|
|
72
|
+
3. 如果用户指定了子命令(如 `/openflow build`),优先按指定阶段执行,但检查前置条件
|
|
73
|
+
4. 如果用户只输入 `/openflow`,执行状态检测,自动路由到对应阶段
|
|
74
|
+
5. 读取当前 openflow skill 目录下的阶段文件:`<阶段>.md`(与本 `SKILL.md` 同目录;不要依赖 Claude 专属环境变量)
|
|
75
|
+
6. 按阶段文件中的流程执行,并遵守阶段写入边界
|
|
46
76
|
|
|
47
77
|
### 前置条件检查
|
|
48
78
|
|
|
@@ -51,5 +81,6 @@ description: "OpenSpec + Superpowers workflow orchestrator. Use /openflow propos
|
|
|
51
81
|
| proposal | 无 | — |
|
|
52
82
|
| brainstorming | 无 | — |
|
|
53
83
|
| spec | 需要有活跃变更目录或有用户需求 | "请先用 /openflow proposal 或 /openflow brainstorming 描述需求" |
|
|
84
|
+
| amend | 需要有活跃变更目录,通常需要 plan-ready.md | "还没有可修订的活跃变更,请先完成 /openflow spec" |
|
|
54
85
|
| build | 需要存在 plan-ready.md | "请先完成 /openflow spec 生成规格和翻译" |
|
|
55
86
|
| close | 需要实现已完成 | "实现尚未完成,请先用 /openflow build 执行" |
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openflow/amend
|
|
3
|
+
description: Revise active OpenSpec requirements during build, regenerate plan-ready.md, and append implementation tasks without archiving the change
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Amend: 需求变更修订
|
|
7
|
+
|
|
8
|
+
## 目标
|
|
9
|
+
|
|
10
|
+
在 active change 已经进入 spec/build 后,发现需求遗漏或规格需要改变时,受控修改 OpenSpec 文档和执行计划,然后回到 `/openflow build` 继续实现。
|
|
11
|
+
|
|
12
|
+
## 适用场景
|
|
13
|
+
|
|
14
|
+
- build 过程中发现原需求漏了一个功能、边界或验收条件
|
|
15
|
+
- 用户明确说“修改需求”“补充 spec”“重新生成规格”“需求变更”
|
|
16
|
+
- close 前发现规格本身不完整,而不是代码没有按现有规格实现
|
|
17
|
+
|
|
18
|
+
不适用:
|
|
19
|
+
- 只是代码没有实现现有 spec → 继续 `/openflow build`
|
|
20
|
+
- 变更已经 close/archive → 开新的 `/openflow proposal` 或 `/openflow brainstorming`
|
|
21
|
+
- 只是文案、注释或实现细节调整,且不改变行为 → 继续当前实现阶段
|
|
22
|
+
|
|
23
|
+
## 前置条件
|
|
24
|
+
|
|
25
|
+
- `openspec/changes/<变更名>/` 下存在 active change
|
|
26
|
+
- 至少存在 `proposal.md`
|
|
27
|
+
- 通常应已存在 `plan-ready.md`;如果没有,优先回到 `/openflow spec`
|
|
28
|
+
|
|
29
|
+
如果没有 active change,提示:
|
|
30
|
+
> "还没有活跃变更。请先用 /openflow proposal 或 /openflow brainstorming 创建需求。"
|
|
31
|
+
|
|
32
|
+
如果变更已归档,提示:
|
|
33
|
+
> "该变更已经归档。归档后的需求调整应开启新的 /openflow proposal。"
|
|
34
|
+
|
|
35
|
+
## 流程
|
|
36
|
+
|
|
37
|
+
### 1. 确认当前变更
|
|
38
|
+
|
|
39
|
+
检查 `openspec/changes/` 下的 active change。
|
|
40
|
+
|
|
41
|
+
如果有多个,列出并让用户选择:
|
|
42
|
+
> "检测到多个活跃变更:[列表]。要修订哪个变更?"
|
|
43
|
+
|
|
44
|
+
读取当前变更的文档:
|
|
45
|
+
- `proposal.md`
|
|
46
|
+
- `design.md`(如果存在)
|
|
47
|
+
- `specs/**/spec.md`
|
|
48
|
+
- `tasks.md`(如果存在)
|
|
49
|
+
- `plan-ready.md`(如果存在)
|
|
50
|
+
- `docs/superpowers/plans/` 下对应实现计划(如果存在)
|
|
51
|
+
|
|
52
|
+
### 2. 判断是 amend 还是 build
|
|
53
|
+
|
|
54
|
+
先判断用户描述属于哪类:
|
|
55
|
+
|
|
56
|
+
| 情况 | 处理 |
|
|
57
|
+
|------|------|
|
|
58
|
+
| 现有 spec 已覆盖,只是代码未完成 | 回到 `/openflow build` |
|
|
59
|
+
| 新增/修改行为、验收条件、边界、非目标 | 继续 amend |
|
|
60
|
+
| 技术方案受影响 | 修改 `design.md` 并追加任务 |
|
|
61
|
+
| 不确定是否改变需求 | 问 1 个澄清问题 |
|
|
62
|
+
|
|
63
|
+
### 3. 修改 OpenSpec 文档
|
|
64
|
+
|
|
65
|
+
按影响范围更新:
|
|
66
|
+
|
|
67
|
+
- `proposal.md`:追加 `## Amendments`,记录本次需求变更的日期、原因和摘要
|
|
68
|
+
- `design.md`:仅当技术方案或约束变化时修改
|
|
69
|
+
- `specs/<capability>/spec.md`:使用 `ADDED`、`MODIFIED`、`REMOVED` 或 `RENAMED Requirements` 表达 delta
|
|
70
|
+
- `tasks.md`:追加新任务;不要重写或删除已完成任务
|
|
71
|
+
|
|
72
|
+
要求:
|
|
73
|
+
- 每个新增或修改的 requirement 必须至少有一个 `#### Scenario:`
|
|
74
|
+
- `MODIFIED Requirements` 必须包含完整的新 requirement 文本,不只写差异片段
|
|
75
|
+
- 已完成任务保留原 checkbox 状态
|
|
76
|
+
|
|
77
|
+
### 4. 校验 OpenSpec
|
|
78
|
+
|
|
79
|
+
如果 OpenSpec CLI 可用,运行:
|
|
80
|
+
|
|
81
|
+
```bash
|
|
82
|
+
openspec validate <变更名> --strict
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
校验失败时,修正文档后重新校验。
|
|
86
|
+
|
|
87
|
+
### 5. 重新生成 plan-ready.md
|
|
88
|
+
|
|
89
|
+
根据修订后的 OpenSpec 文档更新 `plan-ready.md`。
|
|
90
|
+
|
|
91
|
+
规则:
|
|
92
|
+
- 保留原 `## 来源`
|
|
93
|
+
- 追加 `## Amendments`,记录本次修订来源和影响
|
|
94
|
+
- 保留已完成实现步骤的历史上下文
|
|
95
|
+
- 追加新的实现步骤,按执行依赖排序
|
|
96
|
+
- 不删除已经完成或正在执行的步骤,除非用户明确要求废弃并说明迁移方式
|
|
97
|
+
|
|
98
|
+
建议追加格式:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## Amendments
|
|
102
|
+
|
|
103
|
+
### YYYY-MM-DD: <简短标题>
|
|
104
|
+
- 原因:<为什么需要改>
|
|
105
|
+
- 影响规格:<spec 路径>
|
|
106
|
+
- 影响任务:<tasks.md 条目>
|
|
107
|
+
|
|
108
|
+
## 追加实现步骤
|
|
109
|
+
|
|
110
|
+
### Task N: <任务名>
|
|
111
|
+
- 目标:<做什么>
|
|
112
|
+
- 改动文件:<哪些文件>
|
|
113
|
+
- 验证方式:<怎么验证>
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 6. 同步详细实现计划
|
|
117
|
+
|
|
118
|
+
如果 `docs/superpowers/plans/YYYY-MM-DD-<变更名>.md` 已存在:
|
|
119
|
+
- 已勾选任务不动
|
|
120
|
+
- 未完成任务可按新需求调整
|
|
121
|
+
- 追加新 task,保留 checkbox
|
|
122
|
+
- 记录本次 amend 来源路径
|
|
123
|
+
|
|
124
|
+
如果详细实现计划还不存在:
|
|
125
|
+
- 不创建代码实现计划,提示下一步用 `/openflow build`
|
|
126
|
+
|
|
127
|
+
### 7. 提示下一步
|
|
128
|
+
|
|
129
|
+
> "需求变更已写入 OpenSpec,plan-ready.md 已更新。接下来继续 `/openflow build`。"
|
|
130
|
+
|
|
131
|
+
## 关键原则
|
|
132
|
+
|
|
133
|
+
- amend 阶段只允许修改规格、任务、plan-ready.md 和实现计划文档,不直接修改代码
|
|
134
|
+
- amend 是 close/archive 前的受控需求变更入口,不用于修代码
|
|
135
|
+
- 不把 build 中的自然语言补充直接当作实现指令;只要改变需求或验收条件,先 amend
|
|
136
|
+
- 已归档变更不可 amend,必须开启新 change
|
|
@@ -9,6 +9,12 @@ description: Deep design — multi-round exploration to confirm architecture and
|
|
|
9
9
|
|
|
10
10
|
通过多轮对话,深入探索需求、方案取舍和架构决策。产出比 proposal 更完整的需求描述和设计方向。
|
|
11
11
|
|
|
12
|
+
## 中断续接规则
|
|
13
|
+
|
|
14
|
+
如果用户在本阶段被打断后继续回复、补充范围、回答确认问题、或修正边界,仍然停留在 brainstorming 阶段。继续收敛设计并更新 `openspec/changes/**/proposal.md`,不要因为用户明确了范围就直接进入实现或修改任何代码。
|
|
15
|
+
|
|
16
|
+
典型错误:在确认“只改企业端?”后,用户回复“运营端也要做回显”,这只是范围修正,必须继续记录需求和方案,不得直接修改任何代码或实现文件。
|
|
17
|
+
|
|
12
18
|
## 流程
|
|
13
19
|
|
|
14
20
|
### 1. 理解背景
|
|
@@ -60,6 +66,7 @@ openspec list
|
|
|
60
66
|
## 注意
|
|
61
67
|
|
|
62
68
|
- 不要写代码
|
|
69
|
+
- 本阶段只允许写 OpenSpec 需求/设计方向文档,禁止修改任何代码或实现文件
|
|
63
70
|
- 不要跳过取舍讨论直接给答案
|
|
64
71
|
- 如果项目很大,建议先拆分成独立的子项目
|
|
65
72
|
- 允许用户改变方向,不要过早锁定
|
package/templates/build.md
CHANGED
|
@@ -9,6 +9,12 @@ description: Call Superpowers to execute implementation, supports checkpoint rec
|
|
|
9
9
|
|
|
10
10
|
读取 plan-ready.md,调用 Superpowers 的 writing-plans 生成详细实现计划,然后按 TDD 铁律执行。
|
|
11
11
|
|
|
12
|
+
## 中断续接规则
|
|
13
|
+
|
|
14
|
+
如果用户在 build 阶段被打断后继续回复、说“继续”、或补充实现细节,保持 build 阶段并从实现计划/checkbox 状态恢复。不要回到 proposal、brainstorming 或 spec。
|
|
15
|
+
|
|
16
|
+
如果用户明确要求修改需求、补充 spec、改变验收条件、改变功能边界或重新生成规格,停止实现并切到 `/openflow amend`。amend 完成后再回到 `/openflow build`。
|
|
17
|
+
|
|
12
18
|
## 前置条件
|
|
13
19
|
|
|
14
20
|
- `openspec/changes/<变更名>/plan-ready.md` 存在
|
|
@@ -69,6 +75,7 @@ docs/superpowers/plans/YYYY-MM-DD-<变更名>.md
|
|
|
69
75
|
|
|
70
76
|
## 关键原则
|
|
71
77
|
|
|
72
|
-
- **不允许在 build 阶段修改规格文档** —
|
|
78
|
+
- **不允许在 build 阶段修改规格文档** — 发现需求遗漏或规格错误时切到 `/openflow amend`
|
|
79
|
+
- build 是唯一默认允许修改代码或实现文件的阶段;如果上一阶段不是 build,不要因为用户确认范围而自动写代码
|
|
73
80
|
- plan-ready.md 是锁定的设计决策,Superpowers 按计划展开执行,不重新理解需求
|
|
74
81
|
- 断点恢复依赖文件系统状态,不依赖 AI 的会话记忆
|
package/templates/close.md
CHANGED
|
@@ -9,6 +9,10 @@ description: Verify implementation consistency and archive
|
|
|
9
9
|
|
|
10
10
|
验证代码实现与设计文档一致,确认规格变更全部体现,然后归档。
|
|
11
11
|
|
|
12
|
+
## 中断续接规则
|
|
13
|
+
|
|
14
|
+
如果用户在 close 阶段被打断后继续回复、说“继续”、或要求完成归档,保持 close 阶段并继续验证/归档。close 阶段不允许顺手修代码;发现差异只记录到 `close-issues.md`。
|
|
15
|
+
|
|
12
16
|
## 前置条件
|
|
13
17
|
|
|
14
18
|
- `docs/superpowers/plans/` 下的实现计划全部 checkbox 已勾选
|
|
@@ -82,5 +86,6 @@ mv openspec/changes/<变更名> openspec/changes/archive/$(date +%Y-%m-%d)-<变
|
|
|
82
86
|
## 关键原则
|
|
83
87
|
|
|
84
88
|
- close 阶段不做代码修改,只做验证和归档
|
|
89
|
+
- 本阶段只允许写归档、验证记录或 `close-issues.md`;禁止修改任何代码或实现文件
|
|
85
90
|
- 不一致先记录,不现场修复
|
|
86
91
|
- 防止边写代码边改需求的恶性循环
|
package/templates/proposal.md
CHANGED
|
@@ -9,6 +9,12 @@ description: Lightweight requirement capture — 3-5 questions to quickly conver
|
|
|
9
9
|
|
|
10
10
|
用最少的提问,把用户脑子里的需求变成可执行的变更描述。不做深度设计,不生成代码。
|
|
11
11
|
|
|
12
|
+
## 中断续接规则
|
|
13
|
+
|
|
14
|
+
如果用户在本阶段被打断后继续回复、补充范围、回答确认问题、或修正边界,仍然停留在 proposal 阶段。继续更新 `openspec/changes/**/proposal.md`,不要因为用户说“就这样做”“继续”“范围改成 X”而写任何代码或实现文件。
|
|
15
|
+
|
|
16
|
+
典型错误:proposal 阶段确认“只改企业端?”后,用户回复“运营端也要做回显”。这只是需求范围补充,必须继续更新 proposal,不得直接修改任何代码或实现文件。
|
|
17
|
+
|
|
12
18
|
## 流程
|
|
13
19
|
|
|
14
20
|
### 1. 提出关键问题
|
|
@@ -51,5 +57,6 @@ openspec list
|
|
|
51
57
|
|
|
52
58
|
- 不要做技术设计,那是 spec 和 brainstorming 的事
|
|
53
59
|
- 不要写代码
|
|
60
|
+
- 本阶段只允许写 OpenSpec 需求文档,禁止修改任何代码或实现文件
|
|
54
61
|
- 问题要具体,不要泛泛而谈
|
|
55
62
|
- 如果用户的需求很大(跨多个独立子系统),建议拆分
|
package/templates/spec.md
CHANGED
|
@@ -9,6 +9,10 @@ description: Call OpenSpec to generate specs, auto-translate to plan-ready.md af
|
|
|
9
9
|
|
|
10
10
|
调用 OpenSpec 生成完整的规格文档(proposal.md, design.md, specs/, tasks.md),用户确认后自动翻译成 Superpowers 可执行的 plan-ready.md。
|
|
11
11
|
|
|
12
|
+
## 中断续接规则
|
|
13
|
+
|
|
14
|
+
如果用户在本阶段被打断后继续回复、补充范围、要求调整规格、或确认规格摘要,仍然停留在 spec 阶段。只更新 `openspec/changes/**` 与 `plan-ready.md`,不要修改任何代码或实现文件。
|
|
15
|
+
|
|
12
16
|
## 前置条件
|
|
13
17
|
|
|
14
18
|
- `openspec/changes/` 下存在活跃变更目录(由 proposal 或 brainstorming 阶段创建)
|
|
@@ -101,6 +105,7 @@ openspec validate <变更名> --strict
|
|
|
101
105
|
## 关键原则
|
|
102
106
|
|
|
103
107
|
- **一条代码都不许写** — spec 阶段只产出文档
|
|
108
|
+
- 本阶段只允许写 `openspec/changes/**` 与 `plan-ready.md`,禁止修改任何代码或实现文件
|
|
104
109
|
- 翻译必须在用户确认后自动生成,不需要用户手动触发
|
|
105
110
|
- plan-ready.md 的 ## 来源 部分必须写明路径,方便 Superpowers 执行时回溯
|
|
106
111
|
- 按执行依赖排序是翻译的关键步骤:先依赖后依赖方
|