sdd-flow-kit 1.0.22 → 1.0.25

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 CHANGED
@@ -59,10 +59,11 @@
59
59
  ##### 需求澄清:用户无需背提示词
60
60
 
61
61
  `install` 会写入 `.cursor/rules/sdd-flow-kit-gates.mdc` 与触发 Skill。
62
- 澄清阶段你**直接粘贴确认点**(编号列表即可),AI 应自动进入文档模式,只改 `openspec/PRD/**`,不改 `src/`。
63
- 写业务代码仅在 `/opsx-propose` 完成且你同意 `/opsx-apply` 之后。
62
+ 澄清阶段你**直接粘贴确认点**(编号列表即可),AI 先进入文档模式更新 `openspec/PRD/**`。
63
+ **默认**:03 闭环并生成 01/02/04 后,**同一回合自动** `/opsx-propose`(01+02+UI)→ `/opsx-apply`,无需再说「继续」。
64
+ 说「只提案」或「先别写代码」可停在提案阶段;设 `autoChainOpsx: false` 可恢复人工分步。
64
65
 
65
- 阶段口语(可选,非必须):`继续` / `做提案` propose;`开始 apply` → 实现。
66
+ 阶段口语(可选,用于断点续跑):`继续` / `做提案` / `开始 apply`。
66
67
 
67
68
  ##### `/opsx-apply` 与 TDD + Playwright 检查机制
68
69
 
@@ -42,8 +42,8 @@ async function runClaudeFlow(args) {
42
42
  "1) 01-获取需求文档指引:回填 source/PRD.md(及接口文档,如有)。",
43
43
  "2) 02-需求分析:若矛盾点未闭合,仅更新 03-待确认问题清单.md 并停止;用户确认后再生成 01/02/闭环03。",
44
44
  "3) 用户确认后补全 04-技术文档草稿.md。",
45
- "4) /opsx-propose:基于 0102 UI 参考生成 openspec change,并记录到 05-openspec-提案草稿.md",
46
- "5) /opsx-apply:提案 apply-ready 后执行 delivery-pipeline。",
45
+ "4) 03 闭环后默认同一回合:/opsx-propose01+02+UI)→ /opsx-apply delivery-pipeline exit 0(见 06-opsx-自动串联指引.md)。",
46
+ "5) 仅当用户说「只提案」或 autoChainOpsx=false 时,在 propose 后暂停等待 apply。",
47
47
  "完成后输出一句:SDD flow completed",
48
48
  "",
49
49
  "以下是第2步提示词:",
@@ -74,6 +74,8 @@ async function startFlowScaffold(options) {
74
74
  // 5) Step5 openspec 提案入口(草稿)
75
75
  const openspecEntryTemplate = await (0, templates_1.loadTemplateText)("artifacts/05-openspec-提案草稿.template.md");
76
76
  await (0, fs_1.writeTextFileEnsuredDir)(node_path_1.default.join(outputRoot, "05-openspec-提案草稿.md"), openspecEntryTemplate);
77
+ const opsxAutoChainTemplate = await (0, templates_1.loadTemplateText)("artifacts/06-opsx-auto-chain.template.md");
78
+ await (0, fs_1.writeTextFileEnsuredDir)(node_path_1.default.join(outputRoot, "06-opsx-自动串联指引.md"), opsxAutoChainTemplate);
77
79
  await (0, fs_1.writeTextFileEnsuredDir)(node_path_1.default.join(outputRoot, ".session-state.json"), JSON.stringify({
78
80
  product: options.product,
79
81
  version: options.version,
@@ -81,6 +83,7 @@ async function startFlowScaffold(options) {
81
83
  outputRoot,
82
84
  status: "awaiting_user_confirmation",
83
85
  docModeOnly: true,
86
+ autoChainOpsx: true,
84
87
  phase: "A_or_B",
85
88
  createdAtISO: new Date().toISOString(),
86
89
  }, null, 2));
@@ -110,12 +113,13 @@ async function startFlowScaffold(options) {
110
113
  "- `02-改动点清单.md`",
111
114
  "- `04-技术文档草稿.md`",
112
115
  "",
113
- "## Step 5:/opsx-propose 生成提案",
114
- "基于 `01`、`02` 与用户提供的 UI 参考,执行 `/opsx-propose`。",
115
- "产出在 `openspec/changes/<change-name>/`;在 `05-openspec-提案草稿.md` 记录 change 名称。",
116
- "门禁:仅当 03 已闭环且 01/02/04 完成后执行。",
116
+ "## Step 5–6:自动串联 OPSX(默认)",
117
+ "03 闭环且 01/02/04 完成后,**同一 AI 回合**读 `06-opsx-自动串联指引.md`:",
118
+ "1. `/opsx-propose`(输入 01、02、UI;UI 默认读 `source/PRD.md` 原型目录)",
119
+ "2. 提案 apply-ready 后立即 `/opsx-apply` + `pnpm run opsx:delivery-pipeline`(exit 0)",
120
+ "勿停下来问「是否继续」。仅当用户说「只提案」或 `.session-state.json` 中 `autoChainOpsx: false` 时暂停。",
117
121
  "",
118
- "## Step 6Apply + TDD + Playwright(阶段 D)",
122
+ "## Step 6 明细:Apply + TDD + Playwright(阶段 D)",
119
123
  "依次执行 skill:`openspec-apply-change` → `tdd-script` → `openspec-superpowers-pipeline` → `opsx-dev-delivery-pipeline`。",
120
124
  "仓库根执行:`pnpm run opsx:delivery-pipeline -- <change-name>`(须 exit 0)。",
121
125
  "禁止跳过 TDD / Playwright 裸写代码收尾。详见 `.cursor/skills/sdd-flow-kit/SKILL.md` 阶段 D。",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdd-flow-kit",
3
- "version": "1.0.22",
3
+ "version": "1.0.25",
4
4
  "private": false,
5
5
  "description": "Cross-agent SDD automated development workflow kit (ADI/ADI-like).",
6
6
  "license": "MIT",
@@ -6,7 +6,8 @@
6
6
  ## 前置条件(必须全部满足)
7
7
  - [ ] `03-待确认问题清单.md` 已标注 **矛盾点池状态:已闭合**
8
8
  - [ ] `01-需求分析报告.md`、`02-改动点清单.md`、`04-技术文档草稿.md` 已生成
9
- - [ ] 用户已确认可进入提案阶段
9
+ - [ ] 用户已确认可进入提案阶段(阶段 B 闭环)
10
+ - [ ] `autoChainOpsx` 为 true(默认)→ 与用户确认后**同一回合**自动 propose,无需再等「继续」
10
11
 
11
12
  ## /opsx-propose 输入清单
12
13
  - 需求分析:`01-需求分析报告.md`
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: sdd-flow-kit-trigger
3
- description: 开发某版本需求、SDD 流程、待确认问题澄清、用户回复确认点/矛盾点结论时触发。澄清与确认阶段仅改 openspec/PRD 文档,禁止写 src 等业务代码;仅 /opsx-apply 后可实现。
3
+ description: 开发某版本需求、SDD 流程、待确认问题澄清、用户回复确认点/矛盾点结论时触发。阶段 A/B 仅文档;阶段 B 闭环后**自动** /opsx-propose → /opsx-apply(除非用户说只提案或 autoChainOpsx=false)。
4
4
  ---
5
5
 
6
6
  # SDD Flow Trigger Skill
@@ -20,16 +20,18 @@ description: 开发某版本需求、SDD 流程、待确认问题澄清、用户
20
20
  | 模式 | 何时 | 允许改动的路径 | 禁止 |
21
21
  |------|------|----------------|------|
22
22
  | **文档模式** | 阶段 A/B/C,含「用户发来确认点」 | 仅 `openspec/PRD/**`(及阶段 C 的 `openspec/changes/**`) | 任何 `src/`、`pages/`、`components/` 等业务代码 |
23
- | **实现模式** | 仅阶段 D,且用户同意 `/opsx-apply` | 按 openspec change 与 pipeline 要求 | 跳过 propose |
23
+ | **实现模式** | 阶段 D(提案 apply-ready 后**自动进入**,无需用户再说「开始 apply」) | 按 openspec change 与 pipeline 要求 | 跳过 propose / 跳过 pipeline |
24
24
 
25
25
  **常见错误**:用户粘贴确认点后,你一边更新 `03` 一边改 `.tsx` —— **绝对禁止**。确认回复 = 只做文档,同一回合不得 touch 业务代码。
26
26
 
27
27
  ### 用户侧:零口令(不要要求加前缀)
28
28
  - 用户**直接粘贴**确认点、编号结论、「按 1/2/3 继续」即可;**禁止**要求用户输入【仅文档模式】等固定话术。
29
29
  - 你须在收到后**自动**判定为阶段 B 的文档模式;先读 `openspec/PRD/<runId>/.session-state.json`(`docModeOnly: true` 时严禁写业务代码)与 `03-待确认问题清单.md`。
30
- - 阶段切换口语即可,无需背提示词:
31
- - 提案:`继续` / `做提案` / `propose`(执行 `/opsx-propose`)
32
- - 实现:`开始 apply` / `执行 apply`(且 change 已 apply-ready)
30
+ - **默认自动串联**(`openspec/PRD/<runId>/.session-state.json` 中 `autoChainOpsx !== false`):
31
+ - 阶段 B 产出 01/02/闭环03/04 后,**同一回合**继续阶段 C→D,**不要**停下来问「是否继续」。
32
+ - `06-opsx-自动串联指引.md` 与 `.cursor/skills/opsx-superpowers-workflow/SKILL.md`。
33
+ - **仅当用户说**「只提案」「先别写代码」时:阶段 C 结束后停止,等待 `/opsx-apply`。
34
+ - 口语仍可用:`继续` / `做提案` / `开始 apply`(用于断点续跑)。
33
35
 
34
36
  ## 触发后执行规则(分阶段,禁止跳步)
35
37
 
@@ -64,7 +66,9 @@ description: 开发某版本需求、SDD 流程、待确认问题澄清、用户
64
66
  2. 将状态改为 **矛盾点池状态:已闭合**。
65
67
  3. 再生成 `01`、`02`、`04`(路径均在 `openspec/PRD/<runId>/`)。
66
68
  4. **本回合禁止**:`StrReplace`/`Write` 任何业务源码;禁止「顺手实现一版」。
67
- 5. 结束语简短即可(例:「已更新 01/02/03/04,未改业务代码。有 UI 参考请发路径,或回复继续做提案。」)——**不要**要求用户背固定口令。
69
+ 5. 更新 `.session-state.json`:`status: ready_for_propose`,`phase: B_done`。
70
+ 6. **若 `autoChainOpsx !== false` 且用户未说「只提案」**:**不要结束回合**——立即打开 `06-opsx-自动串联指引.md` 执行阶段 C→D(见下文)。
71
+ 7. 若 `autoChainOpsx === false`:简短说明 01/02/03/04 已就绪,等待用户说「继续」。
68
72
 
69
73
  **本阶段只允许产出:**
70
74
  1. 更新 `03-待确认问题清单.md`(标注 **矛盾点池状态:已闭合**,写入用户确认结论)
@@ -74,34 +78,34 @@ description: 开发某版本需求、SDD 流程、待确认问题澄清、用户
74
78
 
75
79
  **本阶段禁止:**
76
80
  - 修改 `src/`、`pages/`、`components/`、`api/` 等实现代码(`02-改动点清单` 只是**计划**,不是实施许可)
77
- - 执行 `/opsx-propose` 或 `/opsx-apply`
78
- - 生成 openspec change 目录或宣称“开发完成”
79
-
80
- 完成后告知用户:“01/02/03/04 已就绪。发 UI 参考路径,或回复「继续」我将执行 /opsx-propose。”
81
+ - **未闭合 03** 时执行 `/opsx-propose` 或 `/opsx-apply`
82
+ - `autoChainOpsx === false` 时未经用户同意就进入阶段 C/D
81
83
 
82
84
  ---
83
85
 
84
- ### 阶段 C — `/opsx-propose`(生成提案,对应你说的「05」)
85
- **触发条件**:阶段 B 已完成,且用户确认可进入提案(可提供 UI 参考路径,如原型页面文件)。
86
+ ### 阶段 C — `/opsx-propose`(生成提案,对应 Step5)
87
+ **触发条件**:
88
+ - 阶段 B 已完成(03 已闭合,01/02/04 已生成),**且**
89
+ - `autoChainOpsx !== false`(默认)→ **与用户确认同一回合内自动执行**;或用户说「继续/做提案」;或 `status` 为 `ready_for_propose` 且用户未说「只提案」。
86
90
 
87
91
  **必须执行:**
88
92
  1. 先读当前仓库 `.opsx/config.json` 与本地 OPSX skills(禁止跨项目 fallback)
89
- 2. 执行 **`/opsx-propose`**,输入至少包含:
90
- - `01-需求分析报告.md`
91
- - `02-改动点清单.md`
92
- - **UI 图/交互参考**(用户指定路径;无则说明缺失并继续文字 spec)
93
+ 2. 执行 **`/opsx-propose`**(遵循 `.cursor/commands/opsx-propose.md` 与 `openspec-propose` skill),输入至少包含:
94
+ - `openspec/PRD/<runId>/01-需求分析报告.md`
95
+ - `openspec/PRD/<runId>/02-改动点清单.md`
96
+ - **UI 图/交互参考**(按 `06-opsx-自动串联指引.md` 解析;无则注明缺失并继续)
93
97
  3. 一次性生成 openspec change(`proposal.md`、`design.md`、`specs/`、`tasks.md` 等)
98
+ 4. 更新 `05-openspec-提案草稿.md`;`.session-state.json` → `status: propose_done`
94
99
 
95
- **本阶段交付物 = openspec 提案产物**(即手动流程里的 Step5 结果)。
96
- 可在 `openspec/PRD/<runId>/05-openspec-提案草稿.md` 记录 change 名称与路径索引。
100
+ **本阶段交付物 = openspec 提案产物**。
101
+ **本阶段禁止**:写 `src/`、跑 delivery-pipeline。
97
102
 
98
- **本阶段禁止:**
99
- - 执行 `/opsx-apply`(留给阶段 D)
103
+ **默认**:提案 apply-ready 后 **立即** 进入阶段 D(勿问用户「是否 apply」),除非用户说了「只提案」。
100
104
 
101
105
  ---
102
106
 
103
107
  ### 阶段 D — Apply + TDD + Playwright 交付(禁止裸写代码收尾)
104
- **触发条件**:阶段 C 的 openspec 提案已 apply-ready,且用户同意实现(如「开始 apply」)。
108
+ **触发条件**:阶段 C 的 openspec 提案已 apply-ready(`autoChainOpsx` 默认下与阶段 C **同一连续执行**)。
105
109
 
106
110
  **严禁**:跳过 skill 链、不按 `tasks.md` TDD、不跑 delivery-pipeline 就改 `src/` 并宣称完成。
107
111
 
@@ -0,0 +1,38 @@
1
+ # 06 OPSX 自动串联(阶段 B 完成后立即执行)
2
+
3
+ > **不要**在阶段 B 结束后停下来问用户「是否继续」或「是否 apply」。
4
+ > 除非用户明确说「只提案」「先别写代码」,或 `.session-state.json` 中 `autoChainOpsx: false`。
5
+
6
+ ## 输入(本 runId)
7
+ | 文件 | 路径 |
8
+ |------|------|
9
+ | 需求分析 | `01-需求分析报告.md` |
10
+ | 改动清单 | `02-改动点清单.md` |
11
+ | 技术草稿 | `04-技术文档草稿.md` |
12
+ | UI 参考 | 见下方「UI 路径解析」 |
13
+
14
+ ## UI 路径解析(按优先级)
15
+ 1. 用户本条消息给出的路径
16
+ 2. `source/PRD.md` 中的「原型图片目录」行(如 `docs/adi-v232/`)
17
+ 3. `docs/<product>-v<version无点>/` 或 `docs/<product>-<version>/` 目录(只读扫描)
18
+
19
+ 缺失 UI 时:**仍继续** propose,在 `proposal.md` / `design.md` 注明「UI 待补」。
20
+
21
+ ## 阶段 C — `/opsx-propose`(同一对话回合内)
22
+ 1. 读仓库根 `.cursor/skills/opsx-superpowers-workflow/SKILL.md` 与 `openspec-propose/SKILL.md`
23
+ 2. 执行 `/opsx-propose`(或等价的 openspec CLI 全流程),输入 = 上表 01 + 02 + UI
24
+ 3. change 名建议:`{{PRODUCT}}-v{{VERSION}}-<short-topic>`(kebab-case)
25
+ 4. 更新 `05-openspec-提案草稿.md` 与 `.session-state.json`:`status: propose_done`
26
+ 5. **禁止**在本阶段写 `src/` 或跑 delivery-pipeline
27
+
28
+ ## 阶段 D — `/opsx-apply`(提案 apply-ready 后**立即**执行,无需再等用户)
29
+ 1. `npx sdd-flow-kit ensure-opsx --agent cursor -y`(仓库根)
30
+ 2. 写 `.opsx-active-change` = change 名
31
+ 3. 读并执行:`openspec-apply-change` → `tdd-script` → `openspec-superpowers-pipeline` → `opsx-dev-delivery-pipeline`
32
+ 4. `pnpm run opsx:delivery-pipeline -- <change-name>` 直至 **exit 0**
33
+ 5. 更新 `.session-state.json`:`status: complete`,`docModeOnly: false`
34
+
35
+ ## 完成判定
36
+ - [ ] `openspec/changes/<name>/` 下 applyRequires 全部 done
37
+ - [ ] `tasks.md` 全部 `- [x]`
38
+ - [ ] delivery-pipeline exit 0
@@ -86,8 +86,10 @@
86
86
  1. 更新 `03-待确认问题清单.md`,标注“**矛盾点池状态:已闭合**”,写入用户确认结论。
87
87
  2. 生成最终版 `01-需求分析报告.md` 和 `02-改动点清单.md`(清单中的路径是**计划**,不得在本回合修改这些文件)。
88
88
  3. 确认 `02-改动点清单.md` 中仅包含代码文件改动,不涉及 `openspec/spec/` 内容。
89
- 4. **禁止** 修改 `src/` 等业务代码;**禁止** `/opsx-propose` 或 `/opsx-apply`。
90
- 5. 输出时附带:`01/02/03/04 已更新,未改业务代码。需要提案时回复「继续」或提供 UI 参考路径。`
89
+ 4. **禁止** 在阶段 B 内修改 `src/` 等业务代码。
90
+ 5. 更新 `.session-state.json`:`status: ready_for_propose`,`phase: B_done`。
91
+ 6. **若 `autoChainOpsx !== false`(默认)且用户未说「只提案」**:同一回合继续读 `06-opsx-自动串联指引.md`,执行 `/opsx-propose`(输入 01+02+UI)→ `/opsx-apply`;**不要**要求用户再说「继续」。
92
+ 7. 仅当 `autoChainOpsx === false` 时输出:`01/02/03/04 已更新。回复「继续」进入提案。`
91
93
 
92
94
  ---
93
95
 
@@ -32,10 +32,15 @@ alwaysApply: true
32
32
  1. 定位最新或对话相关的 `openspec/PRD/<runId>/`(读 `RUNME.md` 或 `.session-state.json`)。
33
33
  2. **仅**更新 `03`(写入用户结论,标为已闭合)。
34
34
  3. 再生成/更新 `01`、`02`、`04`。
35
- 4. 回复简短说明文档已更新即可;**不要**在同一回合改 `.tsx/.ts/.vue`。
36
- 5. 主动问一句是否需要 UI 参考路径;用户说「继续/可以/做提案」即进入 `/opsx-propose`(仍不写业务代码)。
35
+ 4. 生成 `01`、`02`、`04` 后更新 `.session-state.json`:`status: ready_for_propose`,`phase: B_done`。
36
+ 5. **默认自动串联**(`autoChainOpsx !== false`,且用户未说「只提案」「先别写代码」):
37
+ - **同一回合**读 `06-opsx-自动串联指引.md`,执行 `/opsx-propose` → `/opsx-apply`。
38
+ - UI 参考优先:`source/PRD.md` 中的原型目录(如 `docs/adi-v232/`),其次用户本条消息给出的路径。
39
+ - **不要**停下来问「是否继续」或「是否 apply」。
40
+ 6. 仅当 `autoChainOpsx === false` 时:文档更新后停止,等用户说「继续」再 propose。
37
41
 
38
42
  ## 唯一允许写业务代码的时机
39
- - 用户已走完:`/opsx-propose` openspec change apply-ready 用户明确同意 **`/opsx-apply`**(如「开始 apply」「执行 apply」)。
43
+ - 阶段 D:`/opsx-propose` 已完成且 change **apply-ready** 后执行 `/opsx-apply`(SDD 默认与用户确认后**自动**进入,无需再等「开始 apply」)。
44
+ - 用户明确「只提案」时:在 apply-ready 之前**禁止**写业务代码。
40
45
 
41
- 若用户只说「确认了」「按上面来」但未进入 apply 阶段,**仍禁止**写业务代码。
46
+ 路径 B(03 已闭合、01/02/04 已生成)中:**禁止**仅更新文档就结束回合而不进入 propose(除非 `autoChainOpsx === false` 或用户说只提案)。