kld-sdd 2.4.7
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 +287 -0
- package/bin/kld-sdd-init.js +24 -0
- package/index.js +13 -0
- package/lib/init.js +906 -0
- package/package.json +36 -0
- package/skywalk-sdd/index.js +587 -0
- package/templates/openspec/design.md +290 -0
- package/templates/openspec/overview.md +143 -0
- package/templates/openspec/proposal.md +108 -0
- package/templates/openspec/spec.md +185 -0
- package/templates/openspec/tasks.md +287 -0
- package/templates/opsx-commands/apply.md +420 -0
- package/templates/opsx-commands/archive.md +85 -0
- package/templates/opsx-commands/check.md +344 -0
- package/templates/opsx-commands/design.md +560 -0
- package/templates/opsx-commands/explore.md +89 -0
- package/templates/opsx-commands/propose.md +399 -0
- package/templates/opsx-commands/spec.md +516 -0
- package/templates/opsx-commands/task.md +423 -0
- package/templates/opsx-commands/test.md +207 -0
- package/templates/skills/opsx-apply/SKILL.md +167 -0
- package/templates/skills/opsx-archive/SKILL.md +97 -0
- package/templates/skills/opsx-check/SKILL.md +147 -0
- package/templates/skills/opsx-design/SKILL.md +179 -0
- package/templates/skills/opsx-explore/SKILL.md +99 -0
- package/templates/skills/opsx-propose/SKILL.md +258 -0
- package/templates/skills/opsx-spec/SKILL.md +190 -0
- package/templates/skills/opsx-task/SKILL.md +211 -0
- package/templates/skills/opsx-test/SKILL.md +138 -0
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
# 实施任务拆解 - [Capability 名称]
|
|
2
|
+
|
|
3
|
+
> **定位**:单一 Capability 的 AI 编码引擎执行单元
|
|
4
|
+
>
|
|
5
|
+
> **⚠️ 边界声明**:本任务清单仅服务于当前 Capability,严禁跨模块任务。
|
|
6
|
+
>
|
|
7
|
+
> **【质量红线】颗粒度必须达到"AI能在5分钟内实现";且拆解的任务和验证逻辑必须 100% 覆盖 spec 和 design
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 1. 任务总览
|
|
12
|
+
|
|
13
|
+
### 1.1 关联文档
|
|
14
|
+
|
|
15
|
+
| 文档 | 路径 | 说明 |
|
|
16
|
+
|-----|------|------|
|
|
17
|
+
| 全局契约 | `openspec/specs/overview.md` | 全局约束基线 |
|
|
18
|
+
| 业务意图 | `proposal.md` | 变更背景 |
|
|
19
|
+
| 技术契约 | `specs/[capability]/spec.md` | 当前能力规格 |
|
|
20
|
+
| 技术方案 | `specs/[capability]/design.md` | 当前能力设计 |
|
|
21
|
+
|
|
22
|
+
### 1.2 实现范围
|
|
23
|
+
|
|
24
|
+
<!-- 本次编码要覆盖的功能范围 -->
|
|
25
|
+
|
|
26
|
+
### 1.3 技术栈
|
|
27
|
+
|
|
28
|
+
- 语言:
|
|
29
|
+
- 框架:
|
|
30
|
+
- 依赖:
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 2. 任务执行拓扑图
|
|
35
|
+
|
|
36
|
+
> **⚠️ 依赖管理**:任务必须按层级执行,每层任务可并行,跨层必须等待前置完成
|
|
37
|
+
|
|
38
|
+
### 2.0 测试策略
|
|
39
|
+
|
|
40
|
+
<!-- 该字段从 proposal.md frontmatter 中读取,由 /opsx:propose 阶段用户选择 -->
|
|
41
|
+
|
|
42
|
+
**当前测试策略**:`[测试驱动 | 实现优先 | 无测试]`
|
|
43
|
+
|
|
44
|
+
| 策略 | 说明 | 拓扑结构 |
|
|
45
|
+
|--------|------|------------|
|
|
46
|
+
| 测试驱动 | 测试先行 | 测试骨架 → 实现代码 → 测试验证 |
|
|
47
|
+
| 实现优先 | 代码先行 | 实现代码 → 测试验证 |
|
|
48
|
+
| 无测试 | 仅编译检查 | 仅实现代码 |
|
|
49
|
+
|
|
50
|
+
**测试驱动模式拓扑示例**:
|
|
51
|
+
```
|
|
52
|
+
层级 1: [TASK-01-TEST] 编写 UserService 单元测试(骨架)
|
|
53
|
+
层级 2: [TASK-02-IMPL] 实现 UserService(依赖: TASK-01-TEST)
|
|
54
|
+
层级 3: [TASK-03-VERIFY] 运行测试验证(依赖: TASK-02-IMPL)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**实现优先模式拓扑示例**:
|
|
58
|
+
```
|
|
59
|
+
层级 1: [TASK-01-IMPL] 实现 UserService
|
|
60
|
+
层级 2: [TASK-02-TEST] 编写并运行测试(依赖: TASK-01-IMPL)
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### 2.1 拓扑图
|
|
64
|
+
|
|
65
|
+
```
|
|
66
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
67
|
+
│ 层级 1 (无依赖,可并行) │
|
|
68
|
+
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
69
|
+
│ │ TASK-XXX-01 │ │ TASK-XXX-02 │ │ TASK-XXX-03 │ │
|
|
70
|
+
│ └──────┬───────┘ └──────┬───────┘ └──────────────┘ │
|
|
71
|
+
│ │ │ │
|
|
72
|
+
│ v v │
|
|
73
|
+
│ ┌─────────────────────────────────────────────────────────┐ │
|
|
74
|
+
│ │ 层级 2 (依赖层级 1) │ │
|
|
75
|
+
│ │ ┌──────────────┐ ┌──────────────┐ │ │
|
|
76
|
+
│ │ │ TASK-XXX-04 │ │ TASK-XXX-05 │ │ │
|
|
77
|
+
│ │ │ 依赖: 01 │ │ 依赖: 02 │ │ │
|
|
78
|
+
│ │ └──────┬───────┘ └──────┬───────┘ │ │
|
|
79
|
+
│ │ │ │ │ │
|
|
80
|
+
│ │ v v │ │
|
|
81
|
+
│ │ ┌─────────────────────────────────────────────────────┐│ │
|
|
82
|
+
│ │ │ 层级 3 (依赖层级 2) ││ │
|
|
83
|
+
│ │ │ ┌──────────────┐ ││ │
|
|
84
|
+
│ │ │ │ TASK-XXX-06 │ ││ │
|
|
85
|
+
│ │ │ │ 依赖: 04,05 │ ││ │
|
|
86
|
+
│ │ │ └──────────────┘ ││ │
|
|
87
|
+
│ │ └─────────────────────────────────────────────────────┘│ │
|
|
88
|
+
│ └─────────────────────────────────────────────────────────┘ │
|
|
89
|
+
└─────────────────────────────────────────────────────────────┘
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### 2.2 层级汇总
|
|
93
|
+
|
|
94
|
+
| 层级 | 任务列表 | 可并行 | 前置依赖 |
|
|
95
|
+
|-----|---------|-------|--------|
|
|
96
|
+
| 层级 1 | TASK-XXX-01, TASK-XXX-02 | ✅ 是 | 无 |
|
|
97
|
+
| 层级 2 | TASK-XXX-03 | - | 层级 1 |
|
|
98
|
+
| 层级 3 | TASK-XXX-04 | - | 层级 2 |
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## 3. 原子任务清单
|
|
103
|
+
|
|
104
|
+
<!-- 【质量红线】每个任务必须能在5分钟内由AI实现 -->
|
|
105
|
+
|
|
106
|
+
### 3.0 任务类型说明
|
|
107
|
+
|
|
108
|
+
| 类型 | 说明 | 适用场景 |
|
|
109
|
+
|------|------|----------|
|
|
110
|
+
| 数据层 | 实体、DTO、Mapper、数据访问 | 数据库操作相关 |
|
|
111
|
+
| 接口层 | Service、Controller、API | 业务逻辑和接口 |
|
|
112
|
+
| UI层 | 组件、页面、样式 | 前端展示相关 |
|
|
113
|
+
| 测试-骨架 | 测试类结构、Mock设置 | 测试驱动模式下的测试前置任务 |
|
|
114
|
+
| 测试-验证 | 测试用例实现、断言 | 实现后的测试验证任务 |
|
|
115
|
+
| 配置 | 配置文件、依赖添加 | 项目配置相关 |
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### [TASK-XXX-01] 任务名称
|
|
120
|
+
|
|
121
|
+
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
122
|
+
- **依赖**: 无
|
|
123
|
+
- **状态**: [ ] 未完成
|
|
124
|
+
|
|
125
|
+
#### 任务描述
|
|
126
|
+
<!-- 一句话描述本任务要做什么 -->
|
|
127
|
+
|
|
128
|
+
#### 输入
|
|
129
|
+
-
|
|
130
|
+
|
|
131
|
+
#### 输出
|
|
132
|
+
-
|
|
133
|
+
|
|
134
|
+
#### 实现步骤
|
|
135
|
+
1.
|
|
136
|
+
2.
|
|
137
|
+
3.
|
|
138
|
+
|
|
139
|
+
#### 验收标准
|
|
140
|
+
- [ ] 验收标准 1
|
|
141
|
+
- [ ] 验收标准 2
|
|
142
|
+
|
|
143
|
+
#### 关联设计
|
|
144
|
+
- spec.md 章节:
|
|
145
|
+
- design.md 章节:
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
### [TASK-XXX-02] 任务名称
|
|
150
|
+
|
|
151
|
+
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
152
|
+
- **依赖**: 无
|
|
153
|
+
- **状态**: [ ] 未完成
|
|
154
|
+
|
|
155
|
+
#### 任务描述
|
|
156
|
+
|
|
157
|
+
#### 输入
|
|
158
|
+
|
|
159
|
+
#### 输出
|
|
160
|
+
|
|
161
|
+
#### 实现步骤
|
|
162
|
+
1.
|
|
163
|
+
2.
|
|
164
|
+
3.
|
|
165
|
+
|
|
166
|
+
#### 验收标准
|
|
167
|
+
- [ ]
|
|
168
|
+
- [ ]
|
|
169
|
+
|
|
170
|
+
#### 关联设计
|
|
171
|
+
- spec.md 章节:
|
|
172
|
+
- design.md 章节:
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### [TASK-XXX-03] 任务名称
|
|
177
|
+
|
|
178
|
+
- **类型**: 数据层 / 接口层 / UI层 / 测试
|
|
179
|
+
- **依赖**: TASK-XXX-01, TASK-XXX-02
|
|
180
|
+
- **状态**: [ ] 未完成
|
|
181
|
+
|
|
182
|
+
#### 任务描述
|
|
183
|
+
|
|
184
|
+
#### 输入
|
|
185
|
+
|
|
186
|
+
#### 输出
|
|
187
|
+
|
|
188
|
+
#### 实现步骤
|
|
189
|
+
1.
|
|
190
|
+
2.
|
|
191
|
+
3.
|
|
192
|
+
|
|
193
|
+
#### 验收标准
|
|
194
|
+
- [ ]
|
|
195
|
+
- [ ]
|
|
196
|
+
|
|
197
|
+
#### 关联设计
|
|
198
|
+
- spec.md 章节:
|
|
199
|
+
- design.md 章节:
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
## 4. 验证方式
|
|
204
|
+
|
|
205
|
+
### 4.1 单元测试要求
|
|
206
|
+
|
|
207
|
+
<!-- 【质量红线】每个任务必须有对应的单元测试 -->
|
|
208
|
+
|
|
209
|
+
| 任务 ID | 测试类型 | 测试场景 | 断言内容 |
|
|
210
|
+
|--------|---------|---------|---------|
|
|
211
|
+
| TASK-XXX-01 | | | |
|
|
212
|
+
| TASK-XXX-02 | | | |
|
|
213
|
+
|
|
214
|
+
### 4.2 集成测试场景
|
|
215
|
+
|
|
216
|
+
| 场景 | 前置条件 | 操作步骤 | 预期结果 |
|
|
217
|
+
|-----|---------|---------|---------|
|
|
218
|
+
| | | | |
|
|
219
|
+
|
|
220
|
+
### 4.3 手动验证清单
|
|
221
|
+
|
|
222
|
+
- [ ] 验证项 1
|
|
223
|
+
- [ ] 验证项 2
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## 5. 外部依赖
|
|
228
|
+
|
|
229
|
+
| 依赖项 | 类型 | 提供方 | 状态 | 备注 |
|
|
230
|
+
|-------|------|-------|------|------|
|
|
231
|
+
| | 其他能力 / 第三方 | | ✅ 就绪 / ⏳ 等待 | |
|
|
232
|
+
|
|
233
|
+
---
|
|
234
|
+
|
|
235
|
+
## 6. 代码规范
|
|
236
|
+
|
|
237
|
+
### 6.1 命名规范
|
|
238
|
+
|
|
239
|
+
- 类名:
|
|
240
|
+
- 方法名:
|
|
241
|
+
- 变量名:
|
|
242
|
+
|
|
243
|
+
### 6.2 代码风格
|
|
244
|
+
|
|
245
|
+
- 缩进:
|
|
246
|
+
- 注释:
|
|
247
|
+
- 异常处理:
|
|
248
|
+
|
|
249
|
+
### 6.3 日志规范
|
|
250
|
+
|
|
251
|
+
- 日志级别:
|
|
252
|
+
- 日志格式:
|
|
253
|
+
- 敏感信息处理:
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
## 7. 交付物
|
|
258
|
+
|
|
259
|
+
### 7.1 代码文件
|
|
260
|
+
|
|
261
|
+
| 文件路径 | 说明 | 对应任务 |
|
|
262
|
+
|---------|------|---------|
|
|
263
|
+
| | | TASK-XXX-01 |
|
|
264
|
+
|
|
265
|
+
### 7.2 测试文件
|
|
266
|
+
|
|
267
|
+
| 文件路径 | 说明 | 对应任务 |
|
|
268
|
+
|---------|------|---------|
|
|
269
|
+
| | | TASK-XXX-01 |
|
|
270
|
+
|
|
271
|
+
### 7.3 文档更新
|
|
272
|
+
|
|
273
|
+
- [ ] README 更新
|
|
274
|
+
- [ ] 接口文档更新
|
|
275
|
+
- [ ] 变更日志更新
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
> **质量红线检查清单**
|
|
280
|
+
> - [ ] 每个任务颗粒度符合"5分钟可实现"标准
|
|
281
|
+
> - [ ] 任务清单 100% 覆盖 spec.md 定义
|
|
282
|
+
> - [ ] 任务清单 100% 覆盖 design.md 定义
|
|
283
|
+
> - [ ] 每个任务都有明确的验收标准
|
|
284
|
+
> - [ ] 每个任务都有对应的单元测试要求
|
|
285
|
+
> - [ ] **依赖拓扑已明确**(依赖字段已填写)
|
|
286
|
+
> - [ ] **任务执行拓扑图已绘制**(层级关系清晰)
|
|
287
|
+
> - [ ] 无循环依赖
|
|
@@ -0,0 +1,420 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: OPSX: Apply
|
|
3
|
+
description: "执行变更实施 - 针对单一 Capability 按 DAG 依赖顺序实现代码"
|
|
4
|
+
argument-hint: "[change-name] [capability-name] [上下文文件...]"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
执行变更实施 - 针对单一 Capability,按 DAG 依赖顺序逐任务实现代码。
|
|
8
|
+
|
|
9
|
+
> **📊 Telemetry(必做,不得跳过)**
|
|
10
|
+
> 在终端执行(必须成功):`node skywalk-sdd/log.js start --command=apply --project=<项目根目录绝对路径> --change=<变更名称> --agent=<Agent类型>`,记录返回的 event_id。
|
|
11
|
+
|
|
12
|
+
> **⚠️ 渐进式上下文加载原则**
|
|
13
|
+
>
|
|
14
|
+
> - 本命令针对**单一 Capability** 执行实施
|
|
15
|
+
> - **上下文路径**:overview.md → proposal.md → 当前 capability 的 spec/design/tasks
|
|
16
|
+
> - ⛔ **隔离红线**:绝对禁止加载同级其他 Capability 的文档
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
**前置要求**: 已完成 `/opsx:task` 或对应 capability 的 tasks.md 已存在;建议先运行 `/opsx:check` 通过质量检查
|
|
21
|
+
|
|
22
|
+
**执行步骤**
|
|
23
|
+
|
|
24
|
+
0. **【Telemetry 必做】记录阶段开始**
|
|
25
|
+
|
|
26
|
+
在终端执行(若命令失败必须中止本阶段,不得跳过):
|
|
27
|
+
```bash
|
|
28
|
+
node skywalk-sdd/log.js start --command=apply --project=<项目根目录绝对路径> --change=<变更名称> --agent=<Agent类型>
|
|
29
|
+
```
|
|
30
|
+
保存输出 JSON 中的 `event_id`,供阶段结束使用。
|
|
31
|
+
|
|
32
|
+
1. **【交互引导】确认变更名称和 Capability**
|
|
33
|
+
|
|
34
|
+
**步骤 1a - 确认变更名称**:
|
|
35
|
+
若未提供 change-name,列出当前所有变更供用户选择:
|
|
36
|
+
```bash
|
|
37
|
+
openspec list --json
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**步骤 1b - 确认 Capability**:
|
|
41
|
+
若未提供 capability-name,读取已存在 tasks.md 的 Capability 列表,使用 **AskUserQuestion** 让用户选择:
|
|
42
|
+
> "请选择要实施的 Capability:
|
|
43
|
+
> - A. user-auth(用户认证)- tasks.md ✅ 已就绪
|
|
44
|
+
> - B. user-profile(用户资料)- tasks.md ✅ 已就绪
|
|
45
|
+
> - C. data-export(数据导出)- tasks.md ❌ 未拆解"
|
|
46
|
+
|
|
47
|
+
**【路径确认】**:
|
|
48
|
+
> "📍 当前操作目标:
|
|
49
|
+
> - **变更**:`<change-name>`
|
|
50
|
+
> - **Capability**:`<capability-name>`
|
|
51
|
+
> - **任务文件**:`changes/<name>/specs/<capability>/tasks.md`"
|
|
52
|
+
|
|
53
|
+
2. **【渐进式上下文加载】严格按顺序读取文档**
|
|
54
|
+
|
|
55
|
+
> **⛔ 上下文加载红线**:只加载当前 Capability 的四文档链,禁止加载其他 Capability!
|
|
56
|
+
|
|
57
|
+
**加载顺序**:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
┌─────────────────────────────────────────────────────────┐
|
|
61
|
+
│ 第 1 层:全局基线(必读) │
|
|
62
|
+
│ → openspec/specs/overview.md │
|
|
63
|
+
└─────────────────────────────────────────────────────────┘
|
|
64
|
+
↓
|
|
65
|
+
┌─────────────────────────────────────────────────────────┐
|
|
66
|
+
│ 第 2 层:宏观背景(必读) │
|
|
67
|
+
│ → changes/<name>/proposal.md │
|
|
68
|
+
└─────────────────────────────────────────────────────────┘
|
|
69
|
+
↓
|
|
70
|
+
┌─────────────────────────────────────────────────────────┐
|
|
71
|
+
│ 第 3 层:当前 Capability 四文档(精准打击) │
|
|
72
|
+
│ → changes/<name>/specs/<capability>/spec.md │
|
|
73
|
+
│ → changes/<name>/specs/<capability>/design.md │
|
|
74
|
+
│ → changes/<name>/specs/<capability>/tasks.md │
|
|
75
|
+
│ │
|
|
76
|
+
│ ⛔ 隔离红线:禁止加载其他 Capability 的文档! │
|
|
77
|
+
└─────────────────────────────────────────────────────────┘
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
**执行加载**:
|
|
81
|
+
```
|
|
82
|
+
使用 Read 工具依次读取:
|
|
83
|
+
1. openspec/specs/overview.md(若不存在则跳过)
|
|
84
|
+
2. changes/<name>/proposal.md
|
|
85
|
+
3. changes/<name>/specs/<capability>/spec.md
|
|
86
|
+
4. changes/<name>/specs/<capability>/design.md
|
|
87
|
+
5. changes/<name>/specs/<capability>/tasks.md(必须存在)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
**若 tasks.md 不存在**:
|
|
91
|
+
> "❌ 当前 Capability 的 tasks.md 不存在,请先运行:
|
|
92
|
+
> `/opsx:task <change-name> <capability-name>`"
|
|
93
|
+
|
|
94
|
+
3. **【上下文加载】识别并读取用户提供的文件**
|
|
95
|
+
|
|
96
|
+
**自动识别上下文文件**:
|
|
97
|
+
若用户在命令中指定了文件路径(如 `/opsx:apply atp-calc ./算法.md`),
|
|
98
|
+
或在对话中附加/引用了文件,**必须自动读取这些文件**。
|
|
99
|
+
|
|
100
|
+
**上下文类型与用途**:
|
|
101
|
+
| 上下文类型 | 检查用途 | 用法 |
|
|
102
|
+
|------------|---------|------|
|
|
103
|
+
| 算法文档 (.md) | 算法一致性检查基线 | 对比实现与算法逻辑 |
|
|
104
|
+
| 参考实现 (.java/.ts) | 代码风格参考 | 保持代码风格一致 |
|
|
105
|
+
| 测试数据 (.xml/.json) | 测试用例设计 | 理解边界条件 |
|
|
106
|
+
|
|
107
|
+
**示例**:
|
|
108
|
+
```
|
|
109
|
+
/opsx:apply atp-calc atp-calculation ./ATP引擎算法逻辑.md
|
|
110
|
+
/opsx:apply atp-calc atp-calculation ./erp-algorithm-atp/src/main/java/
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
4. **【交互引导】上下文补充提示**
|
|
114
|
+
|
|
115
|
+
**若用户未提供任何上下文文件**,AI 分析 design.md 后,**主动提示用户补充**:
|
|
116
|
+
|
|
117
|
+
**【关键】具体化建议**:
|
|
118
|
+
AI 必须**引用 design.md 中的具体内容**给出建议:
|
|
119
|
+
```
|
|
120
|
+
❌ 错误:"建议提供算法参考"
|
|
121
|
+
✅ 正确:"design.md 包含《正差反差计算》伪代码,建议提供该算法的详细逻辑说明"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**主动提示模板**:
|
|
125
|
+
> "📌 **建议提供更丰富的上下文信息**:
|
|
126
|
+
>
|
|
127
|
+
> design.md 中包含:
|
|
128
|
+
> - **《[XX算法]》伪代码** - 建议提供算法参考文档进行一致性检查
|
|
129
|
+
> - **《[XX现有项目]》** - 建议提供参考实现保持代码风格一致
|
|
130
|
+
>
|
|
131
|
+
> 您可以:
|
|
132
|
+
> - **在命令后追加文件路径**:`/opsx:apply atp-calc ./算法.md ./src/`
|
|
133
|
+
> - **在对话中上传文件**或粘贴内容
|
|
134
|
+
>
|
|
135
|
+
> 或者选择:
|
|
136
|
+
> - A. 仅依据 design.md 实现(跳过额外上下文检查)
|
|
137
|
+
> - B. 已提供全部信息"
|
|
138
|
+
|
|
139
|
+
5. **解析 DAG 任务拓扑**
|
|
140
|
+
|
|
141
|
+
从 tasks.md 中解析任务依赖关系:
|
|
142
|
+
- 提取所有任务的 `[TASK-ID]` 和依赖字段
|
|
143
|
+
- 构建拓扑图
|
|
144
|
+
- 计算执行层级
|
|
145
|
+
|
|
146
|
+
**拓扑解析示例**:
|
|
147
|
+
```
|
|
148
|
+
TASK-AUTH-01 (依赖: 无) → 层级 1
|
|
149
|
+
TASK-AUTH-02 (依赖: 无) → 层级 1
|
|
150
|
+
TASK-AUTH-03 (依赖: 01, 02) → 层级 2
|
|
151
|
+
TASK-AUTH-04 (依赖: 03) → 层级 3
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
**循环依赖检测**:
|
|
155
|
+
若检测到循环依赖,立即中止并报告:
|
|
156
|
+
> "❌ 检测到循环依赖:TASK-A → TASK-B → TASK-C → TASK-A
|
|
157
|
+
> 请修正 tasks.md 中的 Depends-On 字段后重试。"
|
|
158
|
+
|
|
159
|
+
6. **显示当前进度和拓扑**
|
|
160
|
+
|
|
161
|
+
向用户展示:
|
|
162
|
+
> "## 实施进度
|
|
163
|
+
> **变更**: `<change-name>`
|
|
164
|
+
> **Capability**: `<capability-name>`
|
|
165
|
+
> **进度**: N/M 任务已完成
|
|
166
|
+
>
|
|
167
|
+
> ### 拓扑任务状态
|
|
168
|
+
> ```
|
|
169
|
+
> 层级 1 (可并行): [TASK-01] ✅, [TASK-02] ⏳
|
|
170
|
+
> 层级 2 (等待 L1): [TASK-03] ⏳
|
|
171
|
+
> 层级 3 (等待 L2): [TASK-04] ⏳
|
|
172
|
+
> ```
|
|
173
|
+
>
|
|
174
|
+
> ### 下一个可执行任务
|
|
175
|
+
> - [ ] [TASK-02] 创建用户表
|
|
176
|
+
>
|
|
177
|
+
> 开始实施?"
|
|
178
|
+
|
|
179
|
+
7. **逐任务实施(按拓扑顺序执行)**
|
|
180
|
+
|
|
181
|
+
**⛔ 拓扑依赖拦截机制**:
|
|
182
|
+
|
|
183
|
+
在执行每个任务前,必须检查其依赖字段:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
对于每个待处理任务:
|
|
187
|
+
|
|
188
|
+
1. 读取任务的依赖字段
|
|
189
|
+
2. 检查所有前置任务的状态是否为 [x](已完成)
|
|
190
|
+
3. 若前置任务未完成 → 拦截并跳过
|
|
191
|
+
4. 若前置任务已完成 → 允许执行
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
**执行循环**:
|
|
195
|
+
|
|
196
|
+
a. **【拓扑依赖检查】**
|
|
197
|
+
|
|
198
|
+
> **⛔ 在执行当前任务前,必须检查前置依赖!**
|
|
199
|
+
|
|
200
|
+
解析当前任务的依赖字段,检查所有依赖任务是否已完成:
|
|
201
|
+
- 若依赖任务未完成,**必须暂停**并明确提示:
|
|
202
|
+
> "⏸ **依赖拦截**:任务 [TASK-XXX-03] 的前置依赖未满足
|
|
203
|
+
> - 依赖任务:[TASK-XXX-01] - ❌ 未完成
|
|
204
|
+
> - 依赖任务:[TASK-XXX-02] - ✅ 已完成
|
|
205
|
+
>
|
|
206
|
+
> 必须先完成 [TASK-XXX-01] 才能执行当前任务。
|
|
207
|
+
>
|
|
208
|
+
> 请选择:
|
|
209
|
+
> - A. 执行 [TASK-XXX-01]
|
|
210
|
+
> - B. 查看任务详情
|
|
211
|
+
> - C. 暂停实施"
|
|
212
|
+
- 若所有依赖已完成,继续执行
|
|
213
|
+
|
|
214
|
+
b. **显示当前任务**
|
|
215
|
+
> "📍 **[N/M]** 正在处理任务: [TASK-ID] <任务描述>
|
|
216
|
+
> - **类型**: 数据层
|
|
217
|
+
> - **依赖**: [依赖列表] ✅ 已满足
|
|
218
|
+
> - **层级**: 2"
|
|
219
|
+
|
|
220
|
+
c. **实现代码**
|
|
221
|
+
- 根据 tasks.md 中的任务描述实现代码
|
|
222
|
+
- 遵循 design.md 中的设计约定
|
|
223
|
+
- 遵循 overview.md 中的全局规范
|
|
224
|
+
- 保持变更最小化、聚焦单一任务
|
|
225
|
+
|
|
226
|
+
c2. **❗【新增】算法一致性门禁**
|
|
227
|
+
|
|
228
|
+
> **对于包含算法逻辑的 TASK-XX-IMPL 任务,必须检查实现与 design.md 伪代码的一致性**
|
|
229
|
+
|
|
230
|
+
**触发条件**:
|
|
231
|
+
- 任务类型为 IMPL(实现任务)
|
|
232
|
+
- design.md 中包含对应的伪代码章节
|
|
233
|
+
|
|
234
|
+
**检查内容**:
|
|
235
|
+
| 检查项 | 要求 | 未通过处理 |
|
|
236
|
+
|---------|------|------------|
|
|
237
|
+
| 方法签名 | 参数类型、返回值类型一致 | ⚠️ 警告 |
|
|
238
|
+
| 核心算法逻辑 | 循环、分支、累加顺序一致 | ❌ 拦截 |
|
|
239
|
+
| 边界条件处理 | 空值、零值、极值处理一致 | ⚠️ 警告 |
|
|
240
|
+
|
|
241
|
+
**检查流程**:
|
|
242
|
+
1. 读取 design.md 中对应的伪代码章节
|
|
243
|
+
2. 对比实现代码与伪代码的关键逻辑
|
|
244
|
+
3. 若提供了 --context 算法文档,进一步对比原始算法
|
|
245
|
+
|
|
246
|
+
**【拦截示例】**:
|
|
247
|
+
> "⚠️ **算法一致性检查未通过**
|
|
248
|
+
>
|
|
249
|
+
> **问题**:calcZhengchaFucha 方法逻辑不一致
|
|
250
|
+
>
|
|
251
|
+
> **design.md 伪代码**:
|
|
252
|
+
> ```
|
|
253
|
+
> if (direction == -1) {
|
|
254
|
+
> remaining = remaining.subtract(data.getCalcQuantity());
|
|
255
|
+
> }
|
|
256
|
+
> ```
|
|
257
|
+
>
|
|
258
|
+
> **实际实现**:
|
|
259
|
+
> ```
|
|
260
|
+
> remaining = remaining.add(data.getCalcQuantity());
|
|
261
|
+
> ```
|
|
262
|
+
>
|
|
263
|
+
> **原因分析**:
|
|
264
|
+
> - 伪代码假设 calcQuantity 为正数
|
|
265
|
+
> - 实际实现中 calcQuantity 对需求已是负数
|
|
266
|
+
>
|
|
267
|
+
> 请选择:
|
|
268
|
+
> - A. 修复 design.md 伪代码(实现正确)
|
|
269
|
+
> - B. 修复实现代码(伪代码正确)
|
|
270
|
+
> - C. 标记为 '设计变更',继续执行"
|
|
271
|
+
|
|
272
|
+
**【通过后显示】**:
|
|
273
|
+
> "✅ **算法一致性检查通过**
|
|
274
|
+
> - 方法签名: ✅ 一致
|
|
275
|
+
> - 核心逻辑: ✅ 一致
|
|
276
|
+
> - 边界处理: ✅ 一致"
|
|
277
|
+
|
|
278
|
+
d. **⛔【必须】编译检查门禁**
|
|
279
|
+
|
|
280
|
+
> **⛔ 红线:每完成一个任务后,必须确保代码可以编译通过!**
|
|
281
|
+
|
|
282
|
+
**检查流程**:
|
|
283
|
+
|
|
284
|
+
1. **检测项目类型并执行编译**:
|
|
285
|
+
- **TypeScript/JavaScript**: `npm run build` 或 `tsc --noEmit` 或 `npx tsc --noEmit`
|
|
286
|
+
- **Java/Maven**: `mvn compile -q`
|
|
287
|
+
- **Java/Gradle**: `./gradlew compileJava --quiet`
|
|
288
|
+
- **Python**: `python -m py_compile <file>` 或 `mypy <file>`
|
|
289
|
+
- **Go**: `go build ./...`
|
|
290
|
+
- **Rust**: `cargo check`
|
|
291
|
+
- **其他**: 根据项目配置执行相应编译命令
|
|
292
|
+
|
|
293
|
+
2. **检查编译结果**:
|
|
294
|
+
- ✅ 编译成功 → 继续下一步
|
|
295
|
+
- ❌ 编译失败 → **必须立即修复**
|
|
296
|
+
|
|
297
|
+
3. **编译失败处理流程**:
|
|
298
|
+
```
|
|
299
|
+
a. 分析错误信息,定位问题根因
|
|
300
|
+
b. 修复代码错误
|
|
301
|
+
c. 重新执行编译检查
|
|
302
|
+
d. 重复直到编译通过
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
4. **显示检查结果**:
|
|
306
|
+
> "🛠️ **编译检查**
|
|
307
|
+
> - 执行: `npm run build`
|
|
308
|
+
> - 结果: ✅ 编译成功 / ❌ 编译失败
|
|
309
|
+
> - 耗时: 2.3s"
|
|
310
|
+
|
|
311
|
+
> **⚠️ 注意:编译失败的任务禁止标记为已完成!**
|
|
312
|
+
|
|
313
|
+
e. **⛔【必须】测试执行门禁**
|
|
314
|
+
|
|
315
|
+
> **根据 proposal.md 的 `test-strategy` 字段决定测试门禁行为**
|
|
316
|
+
|
|
317
|
+
**首先读取 proposal.md 的 YAML frontmatter 中的 `test-strategy` 字段:**
|
|
318
|
+
|
|
319
|
+
| test-strategy | 门禁行为 |
|
|
320
|
+
|---------------|----------|
|
|
321
|
+
| `tdd` | **⛔ 强制执行**:运行相关测试,测试失败禁止继续,必须修复 |
|
|
322
|
+
| `impl-first` | **⚠️ 警告模式**:运行测试,失败时显示警告但允许继续 |
|
|
323
|
+
| `none` | **跳过**:不执行测试门禁 |
|
|
324
|
+
|
|
325
|
+
**TDD 模式执行流程**:
|
|
326
|
+
1. 检测当前任务是否有对应的测试文件
|
|
327
|
+
2. 执行相关测试用例
|
|
328
|
+
3. 测试通过 → 继续下一步
|
|
329
|
+
4. **测试失败 → 必须修复,禁止标记为已完成!**
|
|
330
|
+
|
|
331
|
+
**Impl-First 模式执行流程**:
|
|
332
|
+
1. 执行相关测试用例
|
|
333
|
+
2. 测试通过 → 继续下一步
|
|
334
|
+
3. 测试失败 → 显示警告信息,询问用户是否继续
|
|
335
|
+
|
|
336
|
+
> **⚠️ 注意:TDD 模式下测试失败的任务禁止标记为已完成!**
|
|
337
|
+
|
|
338
|
+
f. **⛔【必须】立即更新任务状态**
|
|
339
|
+
|
|
340
|
+
每完成一个任务后,必须立即:
|
|
341
|
+
|
|
342
|
+
1. **修改 tasks.md 文件**:
|
|
343
|
+
- 将 `- **状态**: [ ] 未完成` 改为 `- **状态**: [x] 已完成`
|
|
344
|
+
2. **验证修改成功**:读取文件确认状态已更新
|
|
345
|
+
3. **显示进度提示**:
|
|
346
|
+
> "✅ **[TASK-XXX-01] 已完成** [N/M]
|
|
347
|
+
> - 编译检查: ✅ 通过
|
|
348
|
+
> - 已更新 tasks.md 状态: `[ ]` → `[x]`
|
|
349
|
+
> - 下一层任务已解锁:[TASK-XXX-03]"
|
|
350
|
+
|
|
351
|
+
g. **继续下一个可执行任务**
|
|
352
|
+
- 重新检查 DAG,找出所有依赖已满足的任务
|
|
353
|
+
- 若同层有多个可执行任务,按顺序执行
|
|
354
|
+
|
|
355
|
+
**【暂停条件】**:
|
|
356
|
+
- **拓扑依赖未满足** → 拦截并提示
|
|
357
|
+
- **⛔ 编译失败** → 必须修复后才能继续
|
|
358
|
+
- 任务描述不清晰 → 询问用户澄清
|
|
359
|
+
- 实施中发现设计问题 → 建议更新 design.md
|
|
360
|
+
- 遇到错误或阻塞 → 报告问题并等待指导
|
|
361
|
+
|
|
362
|
+
8. **完成或暂停时显示状态**
|
|
363
|
+
|
|
364
|
+
**全部完成时**:
|
|
365
|
+
> "## ✅ 实施完成
|
|
366
|
+
>
|
|
367
|
+
> **变更**: `<change-name>`
|
|
368
|
+
> **Capability**: `<capability-name>`
|
|
369
|
+
> **进度**: 7/7 任务已完成
|
|
370
|
+
>
|
|
371
|
+
> ### 拓扑执行摘要
|
|
372
|
+
> - Layer 1: [TASK-01] ✅, [TASK-02] ✅
|
|
373
|
+
> - Layer 2: [TASK-03] ✅
|
|
374
|
+
> - Layer 3: [TASK-04] ✅
|
|
375
|
+
>
|
|
376
|
+
> 当前 Capability 所有任务已完成!
|
|
377
|
+
>
|
|
378
|
+
> **下一步**:
|
|
379
|
+
> - 若还有其他 Capability:运行 `/opsx:apply <name> <next-capability>`
|
|
380
|
+
> - 若所有 Capability 已完成:运行 `/opsx:archive` 归档变更"
|
|
381
|
+
|
|
382
|
+
**暂停时**:
|
|
383
|
+
> "## ⏸ 实施暂停
|
|
384
|
+
>
|
|
385
|
+
> **变更**: `<change-name>`
|
|
386
|
+
> **Capability**: `<capability-name>`
|
|
387
|
+
> **进度**: 4/7 任务已完成
|
|
388
|
+
>
|
|
389
|
+
> ### 暂停原因
|
|
390
|
+
> <问题描述>
|
|
391
|
+
>
|
|
392
|
+
> ### 拓扑当前状态
|
|
393
|
+
> - Layer 1: [TASK-01] ✅, [TASK-02] ✅
|
|
394
|
+
> - Layer 2: [TASK-03] ⏸ 暂停
|
|
395
|
+
> - Layer 3: [TASK-04] ⏳ 等待
|
|
396
|
+
>
|
|
397
|
+
> **选项**:
|
|
398
|
+
> 1. <选项1>
|
|
399
|
+
> 2. <选项2>
|
|
400
|
+
> 3. 其他方案"
|
|
401
|
+
|
|
402
|
+
---
|
|
403
|
+
|
|
404
|
+
**护栏规则**
|
|
405
|
+
|
|
406
|
+
- **⛔ 渐进式加载**:只加载当前 Capability 的四文档链(overview + proposal + spec + design + tasks)
|
|
407
|
+
- **⛔ 隔离红线**:绝对禁止加载同级其他 Capability 的文档
|
|
408
|
+
- **⛔ 拓扑依赖拦截**:执行任务前必须检查依赖,前置未完成必须拦截
|
|
409
|
+
- **⛔ 必须实时更新任务状态**:每完成一个任务,**立即**修改 tasks.md 状态,禁止批量更新
|
|
410
|
+
- **⛔ 算法一致性门禁**:对于 IMPL 任务,检查实现代码与 design.md 伪代码的一致性,核心逻辑不一致时拦截
|
|
411
|
+
- **⛔ 编译检查门禁**:每完成一个任务后,**必须运行编译检查**,编译失败禁止标记已完成
|
|
412
|
+
- **⛔ 测试执行门禁**:根据 `test-strategy` 决定测试门禁行为(tdd=强制, impl-first=警告, none=跳过)
|
|
413
|
+
- **显示进度反馈**:每完成一个任务,显示「✅ [TASK-ID] 已完成 [N/M]」
|
|
414
|
+
- **保持任务聚焦**:每次只处理一个任务,完成后再继续下一个
|
|
415
|
+
- **代码变更最小化**:每个任务只做必要的代码修改,不要超出任务范围
|
|
416
|
+
- **遇到问题时暂停**:如果任务描述模糊、编译失败、测试失败或发现设计问题,暂停并询问
|
|
417
|
+
- 若变更状态已是 `ARCHIVED`,提示用户该变更已归档,无法继续实施
|
|
418
|
+
|
|
419
|
+
> **📊 Telemetry(必做,不得跳过)**
|
|
420
|
+
> 在终端执行(必须成功):`node skywalk-sdd/log.js end --event-id=<开头记录的event_id> --result=success/failure --summary="实施结果摘要" --project=<项目根目录绝对路径>`
|