sdd-flow-kit 1.0.27 → 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 +32 -9
- package/dist/cli.js +140 -18
- package/dist/core/gitDiffGuard.js +83 -0
- package/dist/core/openspecGate.js +83 -0
- package/dist/core/prdArtifacts.js +53 -0
- package/dist/core/sessionState.js +55 -0
- package/dist/core/writeNext.js +54 -0
- package/dist/index.js +13 -1
- package/dist/steps/resolveRun.js +61 -0
- package/dist/steps/runDeliver.js +82 -0
- package/dist/steps/runGate.js +220 -0
- package/dist/steps/runPhaseAdvance.js +195 -0
- package/dist/steps/runPropose.js +82 -0
- package/dist/steps/startFlow.js +10 -16
- package/package.json +1 -1
- package/src/templates/artifacts/06-agent-skill.template.md +49 -124
- package/src/templates/rules/sdd-no-implement-until-apply.mdc.template +32 -33
package/dist/steps/startFlow.js
CHANGED
|
@@ -10,6 +10,8 @@ const utils_1 = require("../core/utils");
|
|
|
10
10
|
const fs_1 = require("../core/fs");
|
|
11
11
|
const templates_1 = require("../core/templates");
|
|
12
12
|
const inferProject_1 = require("../core/inferProject");
|
|
13
|
+
const sessionState_1 = require("../core/sessionState");
|
|
14
|
+
const writeNext_1 = require("../core/writeNext");
|
|
13
15
|
function renderTemplate(template, vars) {
|
|
14
16
|
let out = template;
|
|
15
17
|
for (const [k, v] of Object.entries(vars)) {
|
|
@@ -76,17 +78,14 @@ async function startFlowScaffold(options) {
|
|
|
76
78
|
await (0, fs_1.writeTextFileEnsuredDir)(path_1.default.join(outputRoot, "05-openspec-提案草稿.md"), openspecEntryTemplate);
|
|
77
79
|
const opsxAutoChainTemplate = await (0, templates_1.loadTemplateText)("artifacts/06-opsx-auto-chain.template.md");
|
|
78
80
|
await (0, fs_1.writeTextFileEnsuredDir)(path_1.default.join(outputRoot, "06-opsx-自动串联指引.md"), opsxAutoChainTemplate);
|
|
79
|
-
|
|
81
|
+
const session = (0, sessionState_1.defaultSession)({
|
|
80
82
|
product: options.product,
|
|
81
83
|
version: options.version,
|
|
82
84
|
runId,
|
|
83
85
|
outputRoot,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
phase: "A_or_B",
|
|
88
|
-
createdAtISO: new Date().toISOString(),
|
|
89
|
-
}, null, 2));
|
|
86
|
+
});
|
|
87
|
+
await (0, sessionState_1.writeSession)(outputRoot, session);
|
|
88
|
+
await (0, writeNext_1.writeInitialNext)(outputRoot, options.projectRoot, runId);
|
|
90
89
|
// runDir 自述
|
|
91
90
|
await (0, fs_1.writeTextFileEnsuredDir)(path_1.default.join(outputRoot, "RUNME.md"), [
|
|
92
91
|
"# RUNME(SDD 流程执行说明)",
|
|
@@ -113,16 +112,11 @@ async function startFlowScaffold(options) {
|
|
|
113
112
|
"- `02-改动点清单.md`",
|
|
114
113
|
"- `04-技术文档草稿.md`",
|
|
115
114
|
"",
|
|
116
|
-
"## Step 5–6
|
|
117
|
-
"
|
|
118
|
-
"
|
|
119
|
-
"2. 提案 apply-ready 后立即 `/opsx-apply` + `pnpm run opsx:delivery-pipeline`(exit 0)",
|
|
120
|
-
"勿停下来问「是否继续」。仅当用户说「只提案」或 `.session-state.json` 中 `autoChainOpsx: false` 时暂停。",
|
|
115
|
+
"## Step 5–6:脚本门禁(禁止仅靠自然语言跳步)",
|
|
116
|
+
"每一步必须先执行 `NEXT.md` 中的 `npx sdd-flow-kit gate` / `phase advance` / `propose` / `deliver`。",
|
|
117
|
+
"命令失败 (exit≠0) 时 **不得** 改 `src/` 或宣称完成。",
|
|
121
118
|
"",
|
|
122
|
-
"
|
|
123
|
-
"依次执行 skill:`openspec-apply-change` → `tdd-script` → `openspec-superpowers-pipeline` → `opsx-dev-delivery-pipeline`。",
|
|
124
|
-
"仓库根执行:`pnpm run opsx:delivery-pipeline -- <change-name>`(须 exit 0)。",
|
|
125
|
-
"禁止跳过 TDD / Playwright 裸写代码收尾。详见 `.cursor/skills/sdd-flow-kit/SKILL.md` 阶段 D。",
|
|
119
|
+
"详见:`NEXT.md`、`06-opsx-自动串联指引.md`、`.cursor/skills/sdd-flow-kit/SKILL.md`。",
|
|
126
120
|
].join("\n"));
|
|
127
121
|
return {
|
|
128
122
|
runId,
|
package/package.json
CHANGED
|
@@ -1,148 +1,73 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd-flow-kit-trigger
|
|
3
|
-
description: 开发某版本需求、SDD
|
|
3
|
+
description: 开发某版本需求、SDD 流程、用户回复确认点时触发。**必须**按 openspec/PRD/<runId>/NEXT.md 执行 `npx sdd-flow-kit gate|phase|propose|deliver`;命令 exit≠0 时禁止进入下一阶段或改 src/。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDD Flow
|
|
6
|
+
# SDD Flow(脚本门禁版 — 不依赖自然语言跳步)
|
|
7
7
|
|
|
8
|
-
##
|
|
9
|
-
- 用户说法包含类似:
|
|
10
|
-
- `开发 XXX 1.2 需求`
|
|
11
|
-
- `开发 XXX 1.2.3 版本`
|
|
12
|
-
- `开发 XXX-V1.2.3 版本`
|
|
13
|
-
- `开发XXX-V1.2.3版本`(无空格连写)
|
|
14
|
-
- `开发 XXX PRD`
|
|
15
|
-
- 或明确要求“按 SDD 流程”推进某版本需求
|
|
16
|
-
- **用户回复待确认点 / 粘贴确认结论 / 说「按上面确认继续」**(即使未再说「开发 XX 需求」也视为 SDD 流程续跑)
|
|
8
|
+
## 铁律
|
|
17
9
|
|
|
18
|
-
|
|
10
|
+
1. 每步开始前读 `openspec/PRD/<runId>/NEXT.md` 与 `.session-state.json`。
|
|
11
|
+
2. **必须**在终端执行其中的 `npx sdd-flow-kit ...`;根据 **exit code** 判断是否可继续(0=通过,非0=停止)。
|
|
12
|
+
3. `docModeOnly: true` 时 **禁止** 修改 `src/`、`e2e/`、`frontend/src/` 等实现路径。
|
|
13
|
+
4. 只有 `gate --expect impl-allowed` 通过后才允许改业务代码。
|
|
14
|
+
5. 只有 `deliver` 成功且 `phase advance --to shipped` 通过后才可宣称「开发完成」。
|
|
19
15
|
|
|
20
|
-
|
|
21
|
-
|------|------|----------------|------|
|
|
22
|
-
| **文档模式** | 阶段 A/B/C,含「用户发来确认点」 | 仅 `openspec/PRD/**`(及阶段 C 的 `openspec/changes/**`) | 任何 `src/`、`pages/`、`components/` 等业务代码 |
|
|
23
|
-
| **实现模式** | 阶段 D(提案 apply-ready 后**自动进入**,无需用户再说「开始 apply」) | 按 openspec change 与 pipeline 要求 | 跳过 propose / 跳过 pipeline |
|
|
16
|
+
## 准备
|
|
24
17
|
|
|
25
|
-
|
|
18
|
+
```bash
|
|
19
|
+
npx sdd-flow-kit run --product <PRODUCT> --version <VERSION> -y
|
|
20
|
+
```
|
|
26
21
|
|
|
27
|
-
|
|
28
|
-
- 用户**直接粘贴**确认点、编号结论、「按 1/2/3 继续」即可;**禁止**要求用户输入【仅文档模式】等固定话术。
|
|
29
|
-
- 你须在收到后**自动**判定为阶段 B 的文档模式;先读 `openspec/PRD/<runId>/.session-state.json`(`docModeOnly: true` 时严禁写业务代码)与 `03-待确认问题清单.md`。
|
|
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`(用于断点续跑)。
|
|
22
|
+
工作目录:`openspec/PRD/<runId>/`(已生成 `NEXT.md`)。
|
|
35
23
|
|
|
36
|
-
##
|
|
24
|
+
## 标准命令序列(复制 NEXT.md,按序执行)
|
|
37
25
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
26
|
+
| 阶段 | 门禁 / 推进 |
|
|
27
|
+
|------|-------------|
|
|
28
|
+
| PRD 已拉取 | `gate --expect prd-fetched` → `phase advance --to after-prd` |
|
|
29
|
+
| 提问模式 | `gate --expect questions-open` |
|
|
30
|
+
| 用户确认后(仅文档) | 更新 01/02/03/04 → `gate --expect docs-closed` → `phase advance --to docs-done` |
|
|
31
|
+
| 提案 | `propose --change <name>` →(AI 生成 openspec artifacts)→ `gate --expect propose-ready` → `phase advance --to propose-done` |
|
|
32
|
+
| 实现 | `phase advance --to impl --change <name>` → `gate --expect impl-allowed` → 按 tasks 改代码 |
|
|
33
|
+
| 交付 | `deliver --change <name>` → `phase advance --to shipped` |
|
|
42
34
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
### 阶段 A — Step1 + Step2(必须可停顿)
|
|
46
|
-
1. **Step1**:打开 `01-获取需求文档指引.md`,**在终端执行其中的 `confluence-doc.py` 命令**(不要跳过)。
|
|
47
|
-
- ADI 必须用 `docs/adi-doc-skill` 或上级 `../docs/adi-doc-skill`,**禁止**用 `docs/oms-doc-skill`。
|
|
48
|
-
- 用户说「开发 ADI_V2.3.2」时,脚本参数传 `2.3.2` 或 `ADI_V2.3.2` 均可。
|
|
49
|
-
- 将下载的 markdown 回填 `source/PRD.md`。
|
|
50
|
-
2. **Step2**:执行 `02-需求分析提示词.md`(引用 `docs/` 下已下载的 PRD)
|
|
35
|
+
统一参数(示例):
|
|
51
36
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
- **必须停止**,请用户补充/确认待确认项
|
|
57
|
-
- **不得** 进入阶段 B/C/D
|
|
37
|
+
```bash
|
|
38
|
+
export PR=<项目根目录>
|
|
39
|
+
export RID=<runId>
|
|
40
|
+
export CH=<change-name>
|
|
58
41
|
|
|
59
|
-
|
|
42
|
+
npx sdd-flow-kit gate --project-root "$PR" --run-id "$RID" --expect docs-closed
|
|
43
|
+
npx sdd-flow-kit phase advance --project-root "$PR" --run-id "$RID" --to docs-done
|
|
44
|
+
```
|
|
60
45
|
|
|
61
|
-
|
|
62
|
-
**触发条件**:用户已回复待确认点,或明确表示“矛盾点池已闭合 / 按确认点继续”。
|
|
63
|
-
|
|
64
|
-
**「用户发来确认点」专用指令(本回合严格执行)**
|
|
65
|
-
1. 先读 `openspec/PRD/<runId>/03-待确认问题清单.md`,把用户消息逐条写入「用户确认结论」列。
|
|
66
|
-
2. 将状态改为 **矛盾点池状态:已闭合**。
|
|
67
|
-
3. 再生成 `01`、`02`、`04`(路径均在 `openspec/PRD/<runId>/`)。
|
|
68
|
-
4. **本回合禁止**:`StrReplace`/`Write` 任何业务源码;禁止「顺手实现一版」。
|
|
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 已就绪,等待用户说「继续」。
|
|
72
|
-
|
|
73
|
-
**本阶段只允许产出:**
|
|
74
|
-
1. 更新 `03-待确认问题清单.md`(标注 **矛盾点池状态:已闭合**,写入用户确认结论)
|
|
75
|
-
2. 生成最终版 `01-需求分析报告.md`
|
|
76
|
-
3. 生成最终版 `02-改动点清单.md`(仅代码文件改动)
|
|
77
|
-
4. 生成 `04-技术文档草稿.md`
|
|
78
|
-
|
|
79
|
-
**本阶段禁止:**
|
|
80
|
-
- 修改 `src/`、`pages/`、`components/`、`api/` 等实现代码(`02-改动点清单` 只是**计划**,不是实施许可)
|
|
81
|
-
- 在 **未闭合 03** 时执行 `/opsx-propose` 或 `/opsx-apply`
|
|
82
|
-
- 在 `autoChainOpsx === false` 时未经用户同意就进入阶段 C/D
|
|
83
|
-
|
|
84
|
-
---
|
|
46
|
+
## 各阶段说明(辅助,不可替代脚本)
|
|
85
47
|
|
|
86
|
-
### 阶段
|
|
87
|
-
|
|
88
|
-
-
|
|
89
|
-
- `autoChainOpsx !== false`(默认)→ **与用户确认同一回合内自动执行**;或用户说「继续/做提案」;或 `status` 为 `ready_for_propose` 且用户未说「只提案」。
|
|
48
|
+
### 阶段 A
|
|
49
|
+
- Step1:`01-获取需求文档指引.md` → 回填 `source/PRD.md`
|
|
50
|
+
- Step2:`02-需求分析提示词.md`;未闭合时 **只** 改 `03`
|
|
90
51
|
|
|
91
|
-
|
|
92
|
-
|
|
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` 解析;无则注明缺失并继续)
|
|
97
|
-
3. 一次性生成 openspec change(`proposal.md`、`design.md`、`specs/`、`tasks.md` 等)
|
|
98
|
-
4. 更新 `05-openspec-提案草稿.md`;`.session-state.json` → `status: propose_done`
|
|
52
|
+
### 阶段 B
|
|
53
|
+
- 用户确认后:生成 01/02/04,**然后必须** `gate docs-closed`(会检测 git 是否误改 src)
|
|
99
54
|
|
|
100
|
-
|
|
101
|
-
|
|
55
|
+
### 阶段 C
|
|
56
|
+
- `propose` 创建 change;AI 按 openspec-propose 写 artifacts;`gate propose-ready` 校验 apply-ready
|
|
102
57
|
|
|
103
|
-
|
|
58
|
+
### 阶段 D
|
|
59
|
+
- `phase advance --to impl` 将 `docModeOnly` 设为 false
|
|
60
|
+
- 实现后 `deliver` 跑 `ensure-opsx` + `pnpm run opsx:delivery-pipeline`
|
|
104
61
|
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
### 阶段 D — Apply + TDD + Playwright 交付(禁止裸写代码收尾)
|
|
108
|
-
**触发条件**:阶段 C 的 openspec 提案已 apply-ready(`autoChainOpsx` 默认下与阶段 C **同一连续执行**)。
|
|
109
|
-
|
|
110
|
-
**严禁**:跳过 skill 链、不按 `tasks.md` TDD、不跑 delivery-pipeline 就改 `src/` 并宣称完成。
|
|
111
|
-
|
|
112
|
-
**必须按顺序执行(以仓库根 `AGENTS.md` 与 `.cursor/skills/` 为准):**
|
|
113
|
-
|
|
114
|
-
0. **环境门禁(缺则自动安装,不可跳过)** — 在仓库根执行:
|
|
115
|
-
```bash
|
|
116
|
-
npx sdd-flow-kit ensure-opsx --agent cursor -y
|
|
117
|
-
```
|
|
118
|
-
- 检测:openspec、TDD/Playwright skills、`opsx:delivery-pipeline` 脚本、`AGENTS.md` 等。
|
|
119
|
-
- 若 FAIL:上述命令会运行 `npx @lixin5257xxx/opsx-workflow setup ...` 安装工作流;**exit 0 前不得开始改 `src/`**。
|
|
120
|
-
1. 读取 `AGENTS.md`、`docs/agent-workflow.md`、`.opsx/config.json`。
|
|
121
|
-
2. 绑定 change 名:写入 `.opsx-active-change`(一行 kebab-case),或 `export OPSX_ACTIVE_CHANGE=<name>`。
|
|
122
|
-
3. **依次读取并执行**(不可省略):
|
|
123
|
-
- `.cursor/skills/openspec-apply-change/SKILL.md` — `openspec instructions apply --change "<name>" --json`
|
|
124
|
-
- `.cursor/skills/tdd-script/SKILL.md` — **每项 task 先测后实现**,并勾选 `tasks.md` 的 `- [x]`
|
|
125
|
-
- `.cursor/skills/openspec-superpowers-pipeline/SKILL.md` — Delta Spec / 代码质量审查门控
|
|
126
|
-
- `.cursor/skills/opsx-dev-delivery-pipeline/SKILL.md` — 机械交付脚本(TDD 门禁 → validate → **Playwright** → archive)
|
|
127
|
-
4. 在**仓库根**(含 `package.json` 的目录)执行:
|
|
128
|
-
```bash
|
|
129
|
-
pnpm run opsx:delivery-pipeline -- <change-name>
|
|
130
|
-
```
|
|
131
|
-
脚本路径须为:`.cursor/skills/opsx-dev-delivery-pipeline/scripts/opsx-delivery-pipeline.sh`(若 `package.json` 仍指向 `poquan-*`,先运行 `npx sdd-flow-kit install -y` 修复)。
|
|
132
|
-
5. **完成判定**:`tasks.md` 全部 `- [x]` **且** 上一条命令 **exit 0**。否则不得宣称 SDD 流程结束。
|
|
133
|
-
|
|
134
|
-
---
|
|
62
|
+
## 严禁
|
|
135
63
|
|
|
136
|
-
|
|
137
|
-
-
|
|
138
|
-
-
|
|
139
|
-
-
|
|
140
|
-
- 跳过用户确认点
|
|
141
|
-
- 在错误仓库执行 OPSX(如 fallback 到其它项目的 poquan-web 路径)
|
|
64
|
+
- 跳过 `gate` / `phase` 直接改代码或宣称完成
|
|
65
|
+
- `docs-closed` 未通过时修改 `src/`
|
|
66
|
+
- 手写 `tasks.md` 全勾 `[x]` 而不跑 `deliver`
|
|
67
|
+
- 用自然语言代替 exit code 判断
|
|
142
68
|
|
|
143
|
-
##
|
|
144
|
-
- 非“开发某版本需求”类对话 → 按普通问答处理
|
|
69
|
+
## 环境
|
|
145
70
|
|
|
146
|
-
## 当前环境
|
|
147
71
|
- agent: {{AGENT_NAME}}
|
|
148
|
-
- 安装: `npx sdd-flow-kit install`
|
|
72
|
+
- 安装: `npx sdd-flow-kit install -y`
|
|
73
|
+
- 脚本帮助: `npx sdd-flow-kit --help`
|
|
@@ -1,46 +1,45 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: SDD
|
|
2
|
+
description: SDD 脚本门禁:必须执行 sdd-flow-kit gate/phase;docModeOnly 时禁止改 src;交付前必须 deliver 成功
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# SDD
|
|
6
|
+
# SDD 流程:脚本门禁(非自然语言)
|
|
7
7
|
|
|
8
|
-
##
|
|
8
|
+
## 强制行为
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
1. 存在活跃 `openspec/PRD/<runId>/` 时,**每步**先读 `NEXT.md` 与 `.session-state.json`。
|
|
11
|
+
2. **必须**运行 `npx sdd-flow-kit gate ...` / `phase advance` / `propose` / `deliver`,以 **命令 exit code** 为准(0 才继续)。
|
|
12
|
+
3. **禁止**在未执行下列命令前修改业务代码:
|
|
13
|
+
- `npx sdd-flow-kit gate --expect docs-closed`(阶段 B 后)
|
|
14
|
+
- `npx sdd-flow-kit phase advance --to impl` + `gate --expect impl-allowed`(阶段 D 前)
|
|
15
|
+
4. **禁止**在未执行 `npx sdd-flow-kit deliver` 成功前宣称需求开发完成。
|
|
11
16
|
|
|
12
|
-
|
|
13
|
-
2. 上一轮你刚输出过待确认问题 / 请用户确认 / 矛盾点池未闭合。
|
|
14
|
-
3. 用户消息为:编号结论、选用方案、是/否、补充业务规则、粘贴 PRD 片段说明——且当前对话上下文在 SDD/`openspec/PRD` 需求流程中。
|
|
15
|
-
4. `openspec/PRD/*/.session-state.json` 中 `docModeOnly` 为 `true`(若存在则必读)。
|
|
17
|
+
## docModeOnly
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
当 `openspec/PRD/*/.session-state.json` 中 `docModeOnly: true`:
|
|
18
20
|
|
|
19
|
-
|
|
21
|
+
- **仅允许** 修改 `openspec/PRD/**`、`openspec/changes/**`(提案阶段)
|
|
22
|
+
- **禁止** 修改 `src/`、`e2e/`、`frontend/src/` 等
|
|
23
|
+
- 用户粘贴确认点后:先 `gate docs-closed`,通过后再 `phase advance --to docs-done`;**不得**同回合改 ts/vue
|
|
20
24
|
|
|
21
|
-
##
|
|
22
|
-
- 读写 `openspec/PRD/**` 下的 markdown(`01`~`05`、`source/`、`RUNME.md`)
|
|
23
|
-
- 只读扫描 `src/`、`pages/`、`components/` 等用于分析,**不得修改**
|
|
25
|
+
## 用户确认点(无需口令)
|
|
24
26
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
-
|
|
27
|
+
1. 更新 `03` → 生成 `01/02/04`
|
|
28
|
+
2. 执行:
|
|
29
|
+
```bash
|
|
30
|
+
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect docs-closed
|
|
31
|
+
npx sdd-flow-kit phase advance --project-root <repo> --run-id <runId> --to docs-done
|
|
32
|
+
```
|
|
33
|
+
3. 失败则停止,不得进入 propose/实现
|
|
30
34
|
|
|
31
|
-
##
|
|
32
|
-
1. 定位最新或对话相关的 `openspec/PRD/<runId>/`(读 `RUNME.md` 或 `.session-state.json`)。
|
|
33
|
-
2. **仅**更新 `03`(写入用户结论,标为已闭合)。
|
|
34
|
-
3. 再生成/更新 `01`、`02`、`04`。
|
|
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。
|
|
35
|
+
## 实现与交付
|
|
41
36
|
|
|
42
|
-
|
|
43
|
-
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
37
|
+
```bash
|
|
38
|
+
npx sdd-flow-kit propose --project-root <repo> --run-id <runId> --change <name>
|
|
39
|
+
# … AI 生成 openspec artifacts …
|
|
40
|
+
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect propose-ready --change <name>
|
|
41
|
+
npx sdd-flow-kit phase advance --project-root <repo> --run-id <runId> --to impl --change <name>
|
|
42
|
+
# … 实现 …
|
|
43
|
+
npx sdd-flow-kit deliver --project-root <repo> --run-id <runId> --change <name>
|
|
44
|
+
npx sdd-flow-kit phase advance --project-root <repo> --run-id <runId> --to shipped --change <name>
|
|
45
|
+
```
|