sdd-flow-kit 1.2.2 → 1.3.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 +71 -45
- package/dist/adapters/index.js +6 -6
- package/dist/cli.js +47 -9
- package/dist/core/acMatrix.js +116 -0
- package/dist/core/bootstrap.js +14 -6
- package/dist/core/inferProject.js +9 -2
- package/dist/core/openspecGate.js +45 -0
- package/dist/core/prdArtifacts.js +26 -0
- package/dist/core/projectRoots.js +79 -2
- package/dist/core/sessionState.js +2 -0
- package/dist/core/writeNext.js +24 -2
- package/dist/postinstall.js +22 -8
- package/dist/steps/runDeliver.js +18 -6
- package/dist/steps/runGate.js +97 -0
- package/dist/steps/runPhaseAdvance.js +54 -5
- package/dist/steps/runPropose.js +6 -2
- package/dist/steps/runValidate.js +204 -0
- package/dist/steps/setupProject.js +65 -2
- package/dist/steps/startFlow.js +14 -11
- package/package.json +1 -1
- package/src/templates/artifacts/01-/351/234/200/346/261/202/345/210/206/346/236/220/346/212/245/345/221/212.template.md +6 -1
- package/src/templates/artifacts/04-/346/212/200/346/234/257/346/226/207/346/241/243.template.md +272 -11
- package/src/templates/artifacts/05-/351/252/214/346/224/266/346/270/205/345/215/225.template.md +38 -0
- package/src/templates/artifacts/06-agent-skill.template.md +23 -9
- package/src/templates/artifacts/{05-openspec- → 06-openspec-}/346/217/220/346/241/210/350/215/211/347/250/277.template.md +16 -4
- package/src/templates/artifacts/{06-opsx-auto-chain.template.md → 07-opsx-auto-chain.template.md} +23 -9
- package/src/templates/prompts/02-sdd-loop-prompt.md +26 -9
- package/src/templates/rules/sdd-no-implement-until-apply.mdc.template +27 -8
- package/src/templates/skills/confluence-doc.py.template +25 -1
- package/src/templates/skills/doc-skill.SKILL.md.template +2 -0
- package/src/templates/skills/layered-testing-strategy.md +35 -0
package/src/templates/artifacts/04-/346/212/200/346/234/257/346/226/207/346/241/243.template.md
CHANGED
|
@@ -1,21 +1,282 @@
|
|
|
1
|
-
# 04
|
|
1
|
+
# 04-前端技术文档(由第 2/3 步产物生成)
|
|
2
2
|
|
|
3
3
|
> 使用输入:
|
|
4
|
-
> - `
|
|
4
|
+
> - `05-验收清单.md`(**验收 SSOT,技术方案须引用 AC-ID**)
|
|
5
|
+
> - `01-需求分析报告.md`(业务概述)
|
|
5
6
|
> - `02-改动点清单.md`
|
|
6
7
|
> - `03-待确认问题清单.md`
|
|
7
8
|
>
|
|
8
|
-
>
|
|
9
|
+
> 说明:
|
|
10
|
+
> - 本文档用于产出“可开发、可联调、可测试、可回滚”的前端实现方案。
|
|
11
|
+
> - 若 `03-待确认问题清单.md` 仍有未闭环问题,请先补齐约束后再冻结本文档。
|
|
12
|
+
> - 建议结论优先写“明确规则”,避免“待定/看情况”。
|
|
9
13
|
|
|
10
|
-
##
|
|
11
|
-
- (架构改动概述)
|
|
14
|
+
## 文档元信息
|
|
12
15
|
|
|
13
|
-
|
|
14
|
-
-
|
|
16
|
+
- 需求名称:
|
|
17
|
+
- 版本号:
|
|
18
|
+
- 业务域/模块:
|
|
19
|
+
- 适用工程与分支:
|
|
20
|
+
- 文档作者/评审人:
|
|
21
|
+
- 最后更新时间:
|
|
22
|
+
- 关联文档:
|
|
23
|
+
- PRD:
|
|
24
|
+
- 接口文档:
|
|
25
|
+
- 原型/Figma:
|
|
26
|
+
- 自测用例:
|
|
15
27
|
|
|
16
|
-
##
|
|
17
|
-
- (说明前端状态/服务端状态边界)
|
|
28
|
+
## 1. 改造范围
|
|
18
29
|
|
|
19
|
-
|
|
20
|
-
|
|
30
|
+
### 1.1 改造目标
|
|
31
|
+
|
|
32
|
+
- 本次改造要解决的问题:
|
|
33
|
+
- 预期业务收益/体验收益:
|
|
34
|
+
- 成功标准(量化):
|
|
35
|
+
|
|
36
|
+
### 1.2 In Scope(本次必须完成)
|
|
37
|
+
|
|
38
|
+
- 页面/路由:
|
|
39
|
+
- 组件/弹窗:
|
|
40
|
+
- 状态管理:
|
|
41
|
+
- 接口联调:
|
|
42
|
+
- 校验与提交流程:
|
|
43
|
+
- 埋点/日志:
|
|
44
|
+
|
|
45
|
+
### 1.3 Out of Scope(明确不做)
|
|
46
|
+
|
|
47
|
+
- 不在本次交付内的能力:
|
|
48
|
+
- 依赖他方排期、暂不落地的能力:
|
|
49
|
+
- 后续迭代建议:
|
|
50
|
+
|
|
51
|
+
### 1.4 影响面评估
|
|
52
|
+
|
|
53
|
+
- 受影响角色(运营/销售/管理员等):
|
|
54
|
+
- 受影响流程(创建/编辑/审批/导出等):
|
|
55
|
+
- 向后兼容性说明:
|
|
56
|
+
|
|
57
|
+
## 2. 页面与交互设计
|
|
58
|
+
|
|
59
|
+
### 2.1 页面显隐/可用性矩阵
|
|
60
|
+
|
|
61
|
+
| 模块/控件 | 场景A | 场景B | 场景C | 说明 |
|
|
62
|
+
| --- | --- | --- | --- | --- |
|
|
63
|
+
| 示例:高级筛选 | 显示 | 隐藏 | 显示但置灰 | 写明触发条件 |
|
|
64
|
+
|
|
65
|
+
### 2.2 核心交互流程(按用户路径)
|
|
66
|
+
|
|
67
|
+
#### 流程A:创建
|
|
68
|
+
|
|
69
|
+
- Step1:
|
|
70
|
+
- Step2:
|
|
71
|
+
- Step3:
|
|
72
|
+
- 成功态:
|
|
73
|
+
- 失败态:
|
|
74
|
+
|
|
75
|
+
#### 流程B:编辑
|
|
76
|
+
|
|
77
|
+
- 可编辑字段:
|
|
78
|
+
- 不可编辑字段:
|
|
79
|
+
- 字段变更引发的联动重置:
|
|
80
|
+
|
|
81
|
+
#### 流程C:列表/详情查看
|
|
82
|
+
|
|
83
|
+
- 列表展示规则:
|
|
84
|
+
- 超长/空值/异常值展示策略:
|
|
85
|
+
- hover、tooltip、展开收起规则:
|
|
86
|
+
|
|
87
|
+
### 2.3 交互细节约束
|
|
88
|
+
|
|
89
|
+
- 防重复点击:
|
|
90
|
+
- loading 态(按钮、局部、全局):
|
|
91
|
+
- 空态文案:
|
|
92
|
+
- 错误态提示口径(toast/inline):
|
|
93
|
+
- 权限不足提示:
|
|
94
|
+
|
|
95
|
+
## 3. 前端状态与数据模型设计
|
|
96
|
+
|
|
97
|
+
### 3.1 领域模型(TypeScript)
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
type ExampleEntity = {
|
|
101
|
+
id: string;
|
|
102
|
+
name: string;
|
|
103
|
+
status: "init" | "ready" | "failed";
|
|
104
|
+
};
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
### 3.2 页面状态拆分
|
|
108
|
+
|
|
109
|
+
- 服务端状态(remote state):
|
|
110
|
+
- 本地状态(ui state):
|
|
111
|
+
- 派生状态(computed/selector):
|
|
112
|
+
- 临时状态(草稿、弹窗输入):
|
|
113
|
+
|
|
114
|
+
### 3.3 状态流转图(文字化)
|
|
115
|
+
|
|
116
|
+
- 初始进入:
|
|
117
|
+
- 用户输入中:
|
|
118
|
+
- 触发请求中:
|
|
119
|
+
- 请求成功:
|
|
120
|
+
- 请求失败:
|
|
121
|
+
- 离开页面清理:
|
|
122
|
+
|
|
123
|
+
### 3.4 数据一致性策略
|
|
124
|
+
|
|
125
|
+
- 多请求并发防抖/竞态处理:
|
|
126
|
+
- 旧响应覆盖新响应的保护:
|
|
127
|
+
- 列表与详情一致性:
|
|
128
|
+
- 缓存命中与失效策略:
|
|
129
|
+
|
|
130
|
+
## 4. 接口与数据交互设计
|
|
131
|
+
|
|
132
|
+
### 4.1 接口清单
|
|
133
|
+
|
|
134
|
+
| 接口 | Method | 用途 | 请求关键字段 | 响应关键字段 | 异常码处理 |
|
|
135
|
+
| --- | --- | --- | --- | --- | --- |
|
|
136
|
+
| `/example/path` | `POST` | 示例说明 | `xxx` | `yyy` | `code != 0` |
|
|
137
|
+
|
|
138
|
+
### 4.2 请求参数映射(UI -> API)
|
|
139
|
+
|
|
140
|
+
- 字段映射关系:
|
|
141
|
+
- 枚举值转换关系:
|
|
142
|
+
- 默认值补齐逻辑:
|
|
143
|
+
- 过滤空值策略:
|
|
144
|
+
|
|
145
|
+
### 4.3 响应数据映射(API -> UI)
|
|
146
|
+
|
|
147
|
+
- 展示字段组装规则:
|
|
148
|
+
- 兜底值处理:
|
|
149
|
+
- 时间/金额/百分比格式化规则:
|
|
150
|
+
- 兼容旧字段方案:
|
|
151
|
+
|
|
152
|
+
### 4.4 提交 payload 结构
|
|
153
|
+
|
|
154
|
+
```json
|
|
155
|
+
{
|
|
156
|
+
"biz_id": "xxx",
|
|
157
|
+
"items": [
|
|
158
|
+
{
|
|
159
|
+
"id": "1",
|
|
160
|
+
"source": "system"
|
|
161
|
+
}
|
|
162
|
+
]
|
|
163
|
+
}
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
### 4.5 重试与容错
|
|
167
|
+
|
|
168
|
+
- 超时重试策略:
|
|
169
|
+
- 可重试与不可重试错误划分:
|
|
170
|
+
- 用户可感知提示文案:
|
|
171
|
+
|
|
172
|
+
## 5. 表单与校验设计
|
|
173
|
+
|
|
174
|
+
### 5.1 字段校验矩阵
|
|
175
|
+
|
|
176
|
+
| 字段 | 必填 | 格式/范围 | 触发时机 | 错误文案 |
|
|
177
|
+
| --- | --- | --- | --- | --- |
|
|
178
|
+
| 示例字段 | 是 | 1-50字符 | blur + submit | `示例字段不能为空` |
|
|
179
|
+
|
|
180
|
+
### 5.2 前后端口径对齐
|
|
181
|
+
|
|
182
|
+
- 前端预校验规则:
|
|
183
|
+
- 后端兜底校验规则:
|
|
184
|
+
- 冲突时以前/后端哪方为准:
|
|
185
|
+
|
|
186
|
+
### 5.3 默认值与自动填充
|
|
187
|
+
|
|
188
|
+
- 默认值来源:
|
|
189
|
+
- 自动更新条件:
|
|
190
|
+
- 用户手动修改后的保护策略:
|
|
191
|
+
|
|
192
|
+
## 6. 异常、边界与降级方案
|
|
193
|
+
|
|
194
|
+
### 6.1 边界场景
|
|
195
|
+
|
|
196
|
+
- 无权限用户:
|
|
197
|
+
- 脏数据/历史数据不完整:
|
|
198
|
+
- 数据量过大(分页、截断、懒加载):
|
|
199
|
+
- 网络抖动与弱网:
|
|
200
|
+
|
|
201
|
+
### 6.2 降级与兜底
|
|
202
|
+
|
|
203
|
+
- 功能开关(feature flag)策略:
|
|
204
|
+
- 接口失败时的兜底展示:
|
|
205
|
+
- 关键流程失败时的替代路径:
|
|
206
|
+
|
|
207
|
+
### 6.3 可观测性
|
|
208
|
+
|
|
209
|
+
- 错误日志埋点:
|
|
210
|
+
- 关键操作埋点:
|
|
211
|
+
- 性能指标采集(FMP/TTI/接口耗时):
|
|
212
|
+
|
|
213
|
+
## 7. 改造清单(到文件级)
|
|
214
|
+
|
|
215
|
+
### 7.1 新增文件
|
|
216
|
+
|
|
217
|
+
- `src/...`:用途说明
|
|
218
|
+
|
|
219
|
+
### 7.2 修改文件
|
|
220
|
+
|
|
221
|
+
- `src/...`:改造点说明
|
|
222
|
+
- `src/...`:改造点说明
|
|
223
|
+
|
|
224
|
+
### 7.3 删除/废弃文件(如有)
|
|
225
|
+
|
|
226
|
+
- `src/...`:废弃原因与迁移说明
|
|
227
|
+
|
|
228
|
+
## 8. 风险点与应对策略
|
|
229
|
+
|
|
230
|
+
| 风险 | 触发条件 | 影响范围 | 等级 | 应对策略 | 负责人 |
|
|
231
|
+
| --- | --- | --- | --- | --- | --- |
|
|
232
|
+
| 示例:接口字段变更 | 后端上线未通知 | 创建/编辑流程 | 高 | 增加兼容解析 + 监控告警 | FE |
|
|
233
|
+
|
|
234
|
+
- 高风险项必须包含:预警信号、止损动作、回滚判定条件。
|
|
235
|
+
|
|
236
|
+
## 9. 发布、灰度与回滚
|
|
237
|
+
|
|
238
|
+
### 9.1 发布前检查
|
|
239
|
+
|
|
240
|
+
- 联调完成:
|
|
241
|
+
- 用例通过:
|
|
242
|
+
- 监控/埋点已验证:
|
|
243
|
+
- feature flag 配置已确认:
|
|
244
|
+
|
|
245
|
+
### 9.2 灰度策略
|
|
246
|
+
|
|
247
|
+
- 灰度范围(账号/租户/流量比例):
|
|
248
|
+
- 观察指标:
|
|
249
|
+
- 放量节奏:
|
|
250
|
+
|
|
251
|
+
### 9.3 回滚方案
|
|
252
|
+
|
|
253
|
+
- 回滚入口(配置回滚/代码回滚):
|
|
254
|
+
- 数据是否需要回滚:
|
|
255
|
+
- 回滚后验证清单:
|
|
256
|
+
|
|
257
|
+
## 10. 测试与验收要点
|
|
258
|
+
|
|
259
|
+
### 10.1 功能测试
|
|
260
|
+
|
|
261
|
+
- 主流程:
|
|
262
|
+
- 分支流程:
|
|
263
|
+
- 异常流程:
|
|
264
|
+
|
|
265
|
+
### 10.2 回归测试
|
|
266
|
+
|
|
267
|
+
- 受影响历史能力:
|
|
268
|
+
- 跨模块联动能力:
|
|
269
|
+
|
|
270
|
+
### 10.3 验收标准(DoD)
|
|
271
|
+
|
|
272
|
+
- 需求项全部可追溯到实现点与测试点;
|
|
273
|
+
- 无 P0/P1 阻塞问题;
|
|
274
|
+
- 文档、埋点、告警、回滚方案齐备。
|
|
275
|
+
|
|
276
|
+
## 11. 待确认事项(若仍存在)
|
|
277
|
+
|
|
278
|
+
> 若此节不为空,文档状态不得标记为“可开发”。
|
|
279
|
+
|
|
280
|
+
- [ ] 待确认项1(责任人 + 截止时间)
|
|
281
|
+
- [ ] 待确认项2(责任人 + 截止时间)
|
|
21
282
|
|
package/src/templates/artifacts/05-/351/252/214/346/224/266/346/270/205/345/215/225.template.md
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 05-验收清单(AC Matrix)
|
|
2
|
+
|
|
3
|
+
> **implement 与 deliver 的唯一验收 SSOT**。`01-需求分析报告.md` 仅为业务概述,**不**承担完整验收职责。
|
|
4
|
+
> 每条 AC 须从 `source/PRD.md` **逐条抽取**(禁止仅从 01 摘要归纳)。
|
|
5
|
+
|
|
6
|
+
## 清单状态
|
|
7
|
+
|
|
8
|
+
- **定义状态**:未定义(AI 从 PRD 填表后改为 `已定义`)
|
|
9
|
+
- **签收状态**:未签收(交付前改为 `已签收`)
|
|
10
|
+
|
|
11
|
+
## 填写规则
|
|
12
|
+
|
|
13
|
+
1. **ID**:`AC-01`、`AC-02`… 全局唯一。
|
|
14
|
+
2. **验收标准**:必须可观测(DOM 顺序、完整 toast/tooltip 文案、E2E 路径、截图对比等)。
|
|
15
|
+
3. **测试类型**:`unit` | `component` | `e2e` | `visual` | `manual`(可组合,如 `unit+e2e`)。
|
|
16
|
+
4. **优先级**:`P0`(交付阻断)/ `P1` / `P2`。
|
|
17
|
+
5. **映射**:propose 后在 `openspec/changes/<change>/tasks.md` 或 `spec.md` 中引用 `[AC-XX]`。
|
|
18
|
+
6. **Intentional 偏差**:与 PRD 有意不一致时,必须同步记入 `03-待确认问题清单.md` 并在下文登记。
|
|
19
|
+
|
|
20
|
+
## 验收项
|
|
21
|
+
|
|
22
|
+
| ID | PRD 出处 | 验收标准(可测试) | 测试类型 | 优先级 | 映射(spec/tasks) | 验收状态 |
|
|
23
|
+
|----|---------|-------------------|---------|--------|-------------------|---------|
|
|
24
|
+
| AC-01 | PRD §(填写) | (填写可观测断言,toast/tooltip 须一字不差) | unit | P0 | 待映射 | 待验收 |
|
|
25
|
+
| AC-02 | PRD §(填写) | (填写) | e2e | P1 | 待映射 | 待验收 |
|
|
26
|
+
|
|
27
|
+
## Intentional 偏差登记
|
|
28
|
+
|
|
29
|
+
| AC-ID | 偏差说明(相对 PRD) | 确认来源(03 条目或用户原话) |
|
|
30
|
+
|-------|---------------------|------------------------------|
|
|
31
|
+
| (无则留空) | | |
|
|
32
|
+
|
|
33
|
+
## 签收检查(deliver 前人工/AI 勾选)
|
|
34
|
+
|
|
35
|
+
- [ ] 全部 P0 行的「验收状态」已改为 `已验收`
|
|
36
|
+
- [ ] 每条 P0 在 `tasks.md` 或 `spec.md` 中有 `[AC-XX]` 映射且对应测试已通过
|
|
37
|
+
- [ ] Intentional 偏差已记入 `03` 且上表已登记
|
|
38
|
+
- [ ] 已将「签收状态」改为 `已签收`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sdd-flow-kit
|
|
3
|
-
description: 用户说「开发/进行 {{DEFAULT_PRODUCT}} x.x.x 版本/需求」「ADI_2.3.2」等时触发。**禁止**未过 gate 直接改 src。必须先 invoke/run,确认点闭合后走 OpenSpec+Superpowers(gate→propose→apply→deliver)。
|
|
3
|
+
description: 用户说「开发/进行 {{DEFAULT_PRODUCT}} x.x.x 版本/需求」「ADI_2.3.2」等时触发。**禁止**未过 gate 直接改 src。必须先 invoke/run,确认点闭合后走 OpenSpec+Superpowers(gate→05 AC→propose→ac-ready→apply→ac-signed→deliver)。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD Flow Kit({{PROJECT_KIND}} — 脚本门禁)
|
|
@@ -21,19 +21,31 @@ npx sdd-flow-kit run --product {{DEFAULT_PRODUCT}} --version <版本号> -y --ag
|
|
|
21
21
|
|
|
22
22
|
然后 **只读** `openspec/PRD/<runId>/NEXT.md` 与 `.session-state.json`,按其中命令顺序执行;**exit code ≠ 0 必须停止**。
|
|
23
23
|
|
|
24
|
+
## 文档职责(SSOT)
|
|
25
|
+
|
|
26
|
+
| 文档 | 职责 |
|
|
27
|
+
|------|------|
|
|
28
|
+
| `01` | 业务概述、风险(**非**完整验收) |
|
|
29
|
+
| `05` | **唯一验收 SSOT** — 从 `source/PRD.md` 逐条抽 AC |
|
|
30
|
+
| `04` | 技术方案,须引用 `[AC-XX]` |
|
|
31
|
+
| `tasks.md` | 每条任务标题含 `[AC-XX]` |
|
|
32
|
+
|
|
24
33
|
## 铁律(防 vibe coding)
|
|
25
34
|
|
|
26
35
|
1. `docModeOnly: true` 时 **禁止** 修改 `src/`、`frontend/src/`、`e2e/`。
|
|
27
|
-
2.
|
|
36
|
+
2. 用户粘贴确认点后:先生成 **`05 → 04 → 01/02`**,再 **必须**:
|
|
28
37
|
```bash
|
|
29
38
|
npx sdd-flow-kit gate --project-root <安装根> --run-id <runId> --expect docs-closed
|
|
30
39
|
npx sdd-flow-kit phase advance --project-root <安装根> --run-id <runId> --to docs-done
|
|
31
40
|
```
|
|
32
|
-
3.
|
|
33
|
-
4.
|
|
34
|
-
|
|
41
|
+
3. propose 后 **必须** `gate ac-ready`(P0 映射到 spec/tasks)才能 `phase impl`。
|
|
42
|
+
4. **仅当** `gate --expect impl-allowed` 通过后,才允许按 `tasks.md` 改业务代码。
|
|
43
|
+
5. **Apply 前必读**:`source/PRD.md` 对应章节 + `05-验收清单.md`(tasks 是子集,不能替代 PRD)。
|
|
44
|
+
6. **deliver 前必须** `gate ac-signed`(05 中 P0 已验收且已签收)。
|
|
45
|
+
7. 提案/实现 **必须** 读并执行:
|
|
46
|
+
- `.cursor/skills/opsx-superpowers-workflow/SKILL.md`
|
|
35
47
|
- `openspec-propose` → `openspec-apply-change` → `pnpm run opsx:delivery-pipeline -- <change>`
|
|
36
|
-
|
|
48
|
+
8. TDD/Playwright 遵循 `LAYERED-TESTING.md`(L2 交互契约、L3 每页 E2E)。
|
|
37
49
|
|
|
38
50
|
## 阶段摘要
|
|
39
51
|
|
|
@@ -41,12 +53,14 @@ npx sdd-flow-kit run --product {{DEFAULT_PRODUCT}} --version <版本号> -y --ag
|
|
|
41
53
|
|------|------|
|
|
42
54
|
| A | Step1 PRD → `gate prd-fetched` → `phase after-prd` |
|
|
43
55
|
| A2 | 提问模式仅 03 → `gate questions-open` |
|
|
44
|
-
| B | 用户确认后 01/02
|
|
45
|
-
| C | `propose` +
|
|
46
|
-
| D | `phase impl` → `gate impl-allowed` →
|
|
56
|
+
| B | 用户确认后 **05→04→01/02** → `gate docs-closed` → `phase docs-done` |
|
|
57
|
+
| C | `propose` + artifacts → `gate propose-ready` + **`gate ac-ready`** → `phase propose-done` |
|
|
58
|
+
| D | `phase impl` → `gate impl-allowed` → `/opsx-apply`(读 PRD+05) |
|
|
59
|
+
| E | `validate` → **05 签收** → `gate ac-signed` → `deliver` → `phase shipped` |
|
|
47
60
|
|
|
48
61
|
## 环境
|
|
49
62
|
|
|
50
63
|
- agent: {{AGENT_NAME}}
|
|
51
64
|
- 全量安装: `npx sdd-flow-kit install --project {{PROJECT_KIND}} -y`
|
|
65
|
+
- 分层测试: `.cursor/skills/sdd-flow-kit/LAYERED-TESTING.md`
|
|
52
66
|
- 本地 OPSX: `SDD_OPSX_WORKFLOW_PACKAGE=file:../../opsx-workflow`
|
|
@@ -1,24 +1,33 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 06-openspec 提案阶段指引(阶段 C 完成后填写)
|
|
2
2
|
|
|
3
3
|
> 本文件不是最终提案正文,而是 **/opsx-propose 执行后的索引与交接记录**。
|
|
4
4
|
> 真正提案产物在 `openspec/changes/<change-name>/`。
|
|
5
5
|
|
|
6
6
|
## 前置条件(必须全部满足)
|
|
7
|
+
|
|
7
8
|
- [ ] `03-待确认问题清单.md` 已标注 **矛盾点池状态:已闭合**
|
|
8
|
-
- [ ] `
|
|
9
|
+
- [ ] `05-验收清单.md` 已标注 **定义状态:已定义**,且 P0 项齐全
|
|
10
|
+
- [ ] `01-需求分析报告.md`、`02-改动点清单.md`、`04-技术文档草稿.md` 已生成(04 须引用 AC-ID)
|
|
11
|
+
- [ ] `gate ac-ready` 通过(P0 已映射到 spec/tasks)
|
|
9
12
|
- [ ] 用户已确认可进入提案阶段(阶段 B 闭环)
|
|
10
13
|
- [ ] `autoChainOpsx` 为 true(默认)→ 与用户确认后**同一回合**自动 propose,无需再等「继续」
|
|
11
14
|
|
|
12
15
|
## /opsx-propose 输入清单
|
|
13
|
-
|
|
16
|
+
|
|
17
|
+
- 需求分析:`01-需求分析报告.md`(概述)
|
|
18
|
+
- **验收 SSOT**:`05-验收清单.md`(**必须**)
|
|
14
19
|
- 改动清单:`02-改动点清单.md`
|
|
20
|
+
- 技术方案:`04-技术文档草稿.md`(引用 AC-ID)
|
|
15
21
|
- UI/交互参考:(填写用户提供的路径,例如原型页面或设计稿目录)
|
|
16
22
|
|
|
17
23
|
## 执行命令(在 AI 工具中)
|
|
24
|
+
|
|
18
25
|
- `/opsx-propose`
|
|
19
|
-
-
|
|
26
|
+
- 说明需基于 **05 + 04 + 02** + UI 参考一次性生成 change
|
|
27
|
+
- **tasks.md 每条任务须含 `[AC-XX]`**(与 05 中 P0 一一映射)
|
|
20
28
|
|
|
21
29
|
## 产出记录(执行后填写)
|
|
30
|
+
|
|
22
31
|
- change 名称:
|
|
23
32
|
- change 路径:`openspec/changes/<change-name>/`
|
|
24
33
|
- 主要文件:
|
|
@@ -27,7 +36,10 @@
|
|
|
27
36
|
- `specs/`
|
|
28
37
|
- `tasks.md`
|
|
29
38
|
- openspec status:(如 4/4 apply-ready)
|
|
39
|
+
- AC 映射自检:(列出 P0 → tasks 行号)
|
|
30
40
|
|
|
31
41
|
## 下一步
|
|
42
|
+
|
|
32
43
|
- 阶段 D:执行 `/opsx-apply`(或 `pnpm run opsx:delivery-pipeline -- <change-name>`)
|
|
44
|
+
- Apply 前须读 `source/PRD.md` 对应章节 + `05-验收清单.md`(tasks 是子集,不能替代 PRD)
|
|
33
45
|
- 禁止在 pipeline 未成功前宣称“需求开发完成”
|
package/src/templates/artifacts/{06-opsx-auto-chain.template.md → 07-opsx-auto-chain.template.md}
RENAMED
|
@@ -1,17 +1,20 @@
|
|
|
1
|
-
#
|
|
1
|
+
# 07 OPSX 自动串联(阶段 B 完成后立即执行)
|
|
2
2
|
|
|
3
3
|
> **不要**在阶段 B 结束后停下来问用户「是否继续」或「是否 apply」。
|
|
4
4
|
> 除非用户明确说「只提案」「先别写代码」,或 `.session-state.json` 中 `autoChainOpsx: false`。
|
|
5
5
|
|
|
6
6
|
## 输入(本 runId)
|
|
7
|
+
|
|
7
8
|
| 文件 | 路径 |
|
|
8
9
|
|------|------|
|
|
10
|
+
| 验收 SSOT | `05-验收清单.md` |
|
|
9
11
|
| 需求分析 | `01-需求分析报告.md` |
|
|
10
12
|
| 改动清单 | `02-改动点清单.md` |
|
|
11
13
|
| 技术草稿 | `04-技术文档草稿.md` |
|
|
12
14
|
| UI 参考 | 见下方「UI 路径解析」 |
|
|
13
15
|
|
|
14
16
|
## UI 路径解析(按优先级)
|
|
17
|
+
|
|
15
18
|
1. 用户本条消息给出的路径
|
|
16
19
|
2. `source/PRD.md` 中的「原型图片目录」行(如 `docs/adi-v232/`)
|
|
17
20
|
3. `docs/<product>-v<version无点>/` 或 `docs/<product>-<version>/` 目录(只读扫描)
|
|
@@ -19,20 +22,31 @@
|
|
|
19
22
|
缺失 UI 时:**仍继续** propose,在 `proposal.md` / `design.md` 注明「UI 待补」。
|
|
20
23
|
|
|
21
24
|
## 阶段 C — `/opsx-propose`(同一对话回合内)
|
|
25
|
+
|
|
22
26
|
1. 读仓库根 `.cursor/skills/opsx-superpowers-workflow/SKILL.md` 与 `openspec-propose/SKILL.md`
|
|
23
|
-
2. 执行 `/opsx-propose
|
|
27
|
+
2. 执行 `/opsx-propose`,输入 = **05 + 04 + 02** + UI
|
|
24
28
|
3. change 名建议:`{{PRODUCT}}-v{{VERSION}}-<short-topic>`(kebab-case)
|
|
25
|
-
4.
|
|
26
|
-
|
|
29
|
+
4. `tasks.md` 每条须含 `[AC-XX]`;完成后执行:
|
|
30
|
+
```bash
|
|
31
|
+
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect ac-ready --change <name>
|
|
32
|
+
```
|
|
33
|
+
5. 更新 `06-openspec-提案草稿.md` 与 `.session-state.json`:`status: propose_done`
|
|
34
|
+
6. **禁止**在本阶段写 `src/` 或跑 delivery-pipeline
|
|
35
|
+
|
|
36
|
+
## 阶段 D — `/opsx-apply`(ac-ready 后**立即**执行,无需再等用户)
|
|
27
37
|
|
|
28
|
-
## 阶段 D — `/opsx-apply`(提案 apply-ready 后**立即**执行,无需再等用户)
|
|
29
38
|
1. `npx sdd-flow-kit ensure-opsx --agent cursor -y`(仓库根)
|
|
30
39
|
2. 写 `.opsx-active-change` = change 名
|
|
31
|
-
3.
|
|
32
|
-
4. `
|
|
33
|
-
5.
|
|
40
|
+
3. **Apply 前必读**:`source/PRD.md` 对应章节 + `05-验收清单.md`
|
|
41
|
+
4. 读并执行:`openspec-apply-change` → `tdd-script`(分层测试策略)→ `openspec-superpowers-pipeline` → `opsx-dev-delivery-pipeline`
|
|
42
|
+
5. Red 断言须写死 PRD/05 原文(toast、tooltip、列序等)
|
|
43
|
+
6. `pnpm run opsx:delivery-pipeline -- <change-name>` 直至 **exit 0**
|
|
44
|
+
7. deliver 前执行 `gate ac-signed`,再 `deliver`
|
|
34
45
|
|
|
35
46
|
## 完成判定
|
|
47
|
+
|
|
48
|
+
- [ ] `gate ac-ready` 通过(P0 已映射)
|
|
36
49
|
- [ ] `openspec/changes/<name>/` 下 applyRequires 全部 done
|
|
37
|
-
- [ ] `tasks.md` 全部 `- [x]`
|
|
50
|
+
- [ ] `tasks.md` 全部 `- [x]` 且含 `[AC-XX]`
|
|
51
|
+
- [ ] `gate ac-signed` 通过
|
|
38
52
|
- [ ] delivery-pipeline exit 0
|
|
@@ -38,16 +38,32 @@
|
|
|
38
38
|
|
|
39
39
|
#### 1. 文件命名规则
|
|
40
40
|
* `[时间戳]` 建议使用 `YYYYMMDD` 格式。
|
|
41
|
-
* 文件名:`01-需求分析报告.md`, `02-改动点清单.md`, `03-待确认问题清单.md
|
|
41
|
+
* 文件名:`01-需求分析报告.md`, `02-改动点清单.md`, `03-待确认问题清单.md`, **`05-验收清单.md`**
|
|
42
42
|
|
|
43
|
-
#### 2.
|
|
43
|
+
#### 2. 文档职责(重要)
|
|
44
|
+
|
|
45
|
+
| 文档 | 职责 |
|
|
46
|
+
|------|------|
|
|
47
|
+
| `01` | 业务概述、范围、风险(**不承担**完整验收) |
|
|
48
|
+
| `05` | **唯一验收 SSOT**(从 `source/PRD.md` 逐条抽 AC) |
|
|
49
|
+
| `04` | 技术方案(引用 AC-ID) |
|
|
50
|
+
| `02` | 代码改动计划表 |
|
|
51
|
+
|
|
52
|
+
#### 3. 文档模板要求
|
|
44
53
|
|
|
45
54
|
**📄 01-需求分析报告.md**
|
|
46
|
-
* **业务概述**:PRD
|
|
55
|
+
* **业务概述**:PRD 核心目标摘要(粗粒度,不替代 05)。
|
|
47
56
|
* **现状映射**:现有系统中对应的模块描述(引用 `openspec` 中的现有定义)。
|
|
48
57
|
* **差异分析**:PRD 与现状的具体差异(新增/修改/删除)。
|
|
49
58
|
* **风险评估**:技术风险、兼容性问题、副作用分析。
|
|
50
59
|
|
|
60
|
+
**📄 05-验收清单.md(AC Matrix)**
|
|
61
|
+
* **必须从 `source/PRD.md` 逐条抽取**,禁止仅从 01 摘要归纳。
|
|
62
|
+
* **格式**:表格 — ID | PRD 出处 | 验收标准(可测试) | 测试类型 | 优先级 | 映射 | 验收状态
|
|
63
|
+
* **ID**:`AC-01`、`AC-02`…;P0 为交付阻断项。
|
|
64
|
+
* 填完后标注:**定义状态:已定义**
|
|
65
|
+
* Intentional 偏差须同步记入 `03` 与 05 偏差表。
|
|
66
|
+
|
|
51
67
|
**📄 02-改动点清单.md**
|
|
52
68
|
* **格式**:表格形式。
|
|
53
69
|
* **字段**:文件路径 | 改动类型 (Add/Modify/Delete) | 模块类型 (Component/Store/API) | 依赖关系 | 预估影响。
|
|
@@ -84,12 +100,13 @@
|
|
|
84
100
|
|
|
85
101
|
**任务(本路径仅文档,不含 openspec,不含写代码)**:
|
|
86
102
|
1. 更新 `03-待确认问题清单.md`,标注“**矛盾点池状态:已闭合**”,写入用户确认结论。
|
|
87
|
-
2.
|
|
88
|
-
3.
|
|
89
|
-
4.
|
|
90
|
-
5.
|
|
91
|
-
6.
|
|
92
|
-
7.
|
|
103
|
+
2. **从 `source/PRD.md` 生成 `05-验收清单.md`**(标注「定义状态:已定义」),再生成 `04-技术文档草稿.md`(引用 AC-ID)。
|
|
104
|
+
3. 生成最终版 `01-需求分析报告.md` 和 `02-改动点清单.md`(清单中的路径是**计划**,不得在本回合修改这些文件)。
|
|
105
|
+
4. 确认 `02-改动点清单.md` 中仅包含代码文件改动,不涉及 `openspec/spec/` 内容。
|
|
106
|
+
5. **禁止** 在阶段 B 内修改 `src/` 等业务代码。
|
|
107
|
+
6. 更新 `.session-state.json`:`status: ready_for_propose`,`phase: B_done`。
|
|
108
|
+
7. **若 `autoChainOpsx !== false`(默认)且用户未说「只提案」**:同一回合继续读 `07-opsx-自动串联指引.md`,执行 `/opsx-propose`(输入 **05+04+02**+UI)→ `/opsx-apply`;**不要**要求用户再说「继续」。
|
|
109
|
+
8. 仅当 `autoChainOpsx === false` 时输出:`05/01/02/03/04 已更新。回复「继续」进入提案。`
|
|
93
110
|
|
|
94
111
|
---
|
|
95
112
|
|
|
@@ -1,18 +1,28 @@
|
|
|
1
1
|
---
|
|
2
|
-
description: SDD 脚本门禁:必须执行 sdd-flow-kit gate/phase;docModeOnly 时禁止改 src;交付前必须 deliver 成功
|
|
2
|
+
description: SDD 脚本门禁:必须执行 sdd-flow-kit gate/phase;docModeOnly 时禁止改 src;交付前必须 ac-signed + deliver 成功
|
|
3
3
|
alwaysApply: true
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDD 流程:脚本门禁(非自然语言)
|
|
7
7
|
|
|
8
|
+
## 文档 SSOT
|
|
9
|
+
|
|
10
|
+
| 文档 | 职责 |
|
|
11
|
+
|------|------|
|
|
12
|
+
| `01` | 业务概述(**非**完整验收) |
|
|
13
|
+
| `05` | **唯一验收 SSOT**(AC Matrix) |
|
|
14
|
+
| `04` | 技术方案(引用 AC-ID) |
|
|
15
|
+
| `tasks.md` | `[AC-XX]` 可执行映射 |
|
|
16
|
+
|
|
8
17
|
## 强制行为
|
|
9
18
|
|
|
10
19
|
1. 存在活跃 `openspec/PRD/<runId>/` 时,**每步**先读 `NEXT.md` 与 `.session-state.json`。
|
|
11
20
|
2. **必须**运行 `npx sdd-flow-kit gate ...` / `phase advance` / `propose` / `deliver`,以 **命令 exit code** 为准(0 才继续)。
|
|
12
21
|
3. **禁止**在未执行下列命令前修改业务代码:
|
|
13
|
-
- `npx sdd-flow-kit gate --expect docs-closed
|
|
22
|
+
- `npx sdd-flow-kit gate --expect docs-closed`(含 `05-验收清单.md` 已定义)
|
|
23
|
+
- `npx sdd-flow-kit gate --expect ac-ready --change <name>`(P0 已映射到 spec/tasks)
|
|
14
24
|
- `npx sdd-flow-kit phase advance --to impl` + `gate --expect impl-allowed`(阶段 D 前)
|
|
15
|
-
4. **禁止**在未执行 `npx sdd-flow-kit deliver` 成功前宣称需求开发完成。
|
|
25
|
+
4. **禁止**在未执行 `gate ac-signed` 与 `npx sdd-flow-kit deliver` 成功前宣称需求开发完成。
|
|
16
26
|
|
|
17
27
|
## docModeOnly
|
|
18
28
|
|
|
@@ -20,9 +30,9 @@ alwaysApply: true
|
|
|
20
30
|
|
|
21
31
|
- **仅允许** 修改 `openspec/PRD/**`、`openspec/changes/**`(提案阶段)
|
|
22
32
|
- **禁止** 修改 `src/`、`e2e/`、`frontend/src/` 等
|
|
23
|
-
-
|
|
33
|
+
- 用户粘贴确认点后:生成 **05 → 04 → 01/02**,再 `gate docs-closed`;**不得**同回合改 ts/vue
|
|
24
34
|
|
|
25
|
-
## 自然语言触发(ADI / OMS 等)
|
|
35
|
+
## 自然语言触发(ADI / OMS / BreakX 等)
|
|
26
36
|
|
|
27
37
|
用户说「开发/进行 ADI 2.3.2 版本」「ADI_2.3.2」等时:
|
|
28
38
|
|
|
@@ -31,7 +41,7 @@ alwaysApply: true
|
|
|
31
41
|
|
|
32
42
|
## 用户确认点(无需口令)
|
|
33
43
|
|
|
34
|
-
1. 更新 `03` → 生成 `01
|
|
44
|
+
1. 更新 `03` → 从 `source/PRD.md` 生成 `05` → `04` → `01`/`02`
|
|
35
45
|
2. 执行:
|
|
36
46
|
```bash
|
|
37
47
|
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect docs-closed
|
|
@@ -39,14 +49,23 @@ alwaysApply: true
|
|
|
39
49
|
```
|
|
40
50
|
3. 失败则停止,不得进入 propose/实现
|
|
41
51
|
|
|
42
|
-
##
|
|
52
|
+
## 提案 / 实现 / 签收 / 交付
|
|
43
53
|
|
|
44
54
|
```bash
|
|
45
55
|
npx sdd-flow-kit propose --project-root <repo> --run-id <runId> --change <name>
|
|
46
|
-
# … AI 生成 openspec artifacts …
|
|
56
|
+
# … AI 生成 openspec artifacts;tasks.md 须含 [AC-XX] …
|
|
47
57
|
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect propose-ready --change <name>
|
|
58
|
+
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect ac-ready --change <name>
|
|
48
59
|
npx sdd-flow-kit phase advance --project-root <repo> --run-id <runId> --to impl --change <name>
|
|
60
|
+
# Apply 前必读 source/PRD.md + 05-验收清单.md
|
|
49
61
|
# … 实现 …
|
|
62
|
+
npx sdd-flow-kit validate --project-root <repo> --run-id <runId> --change <name>
|
|
63
|
+
# 05 签收:P0 已验收 + 签收状态已签收
|
|
64
|
+
npx sdd-flow-kit gate --project-root <repo> --run-id <runId> --expect ac-signed
|
|
50
65
|
npx sdd-flow-kit deliver --project-root <repo> --run-id <runId> --change <name>
|
|
51
66
|
npx sdd-flow-kit phase advance --project-root <repo> --run-id <runId> --to shipped --change <name>
|
|
52
67
|
```
|
|
68
|
+
|
|
69
|
+
## 分层测试(L1–L4)
|
|
70
|
+
|
|
71
|
+
见 `.cursor/skills/sdd-flow-kit/LAYERED-TESTING.md`(由 sdd-flow-kit 安装)。
|