@deepstorm/cli 0.6.1 → 0.6.5
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/dist/cli.js +2563 -2234
- package/dist/hooks/mcp-hook.sh +0 -0
- package/dist/hooks/reef-auto-format.sh.tmpl +0 -0
- package/dist/hooks/reef-block-dangerous.sh +0 -0
- package/dist/hooks/reef-intent-detect.sh +0 -0
- package/dist/hooks/reef-protect-files.sh +0 -0
- package/dist/hooks/reef-run-tests.sh +0 -0
- package/dist/hooks/reef-scope-check.sh +0 -0
- package/dist/hooks/reef-scope-ci.sh +0 -0
- package/dist/hooks/reef-scope-gate.sh +0 -0
- package/dist/hooks/reef-scope-setup.sh +0 -0
- package/dist/hooks/reef-scope-split.sh +0 -0
- package/dist/hooks/sweep-mcp-hook.sh +0 -0
- package/dist/registry.json +3 -0
- package/dist/skills/reef-start/SKILL.md.tmpl +127 -151
- package/dist/skills/reef-start/references/risk-routing-card.md +108 -0
- package/dist/skills/reef-start/references/stage-4-implementation.md +194 -0
- package/dist/skills/reef-start/references/superpowers-gate.md +76 -0
- package/package.json +8 -11
- package/dist/skills/reef-start/SKILL.md +0 -562
package/dist/hooks/mcp-hook.sh
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
package/dist/registry.json
CHANGED
|
@@ -178,6 +178,7 @@
|
|
|
178
178
|
{
|
|
179
179
|
"value": "primeng",
|
|
180
180
|
"label": "PrimeNG",
|
|
181
|
+
"dependsOn": "angular",
|
|
181
182
|
"template": {
|
|
182
183
|
"styleRef": "→ 参考 [PrimeNG 规范](primeng.md)"
|
|
183
184
|
},
|
|
@@ -191,6 +192,7 @@
|
|
|
191
192
|
{
|
|
192
193
|
"value": "antd",
|
|
193
194
|
"label": "Ant Design (React)",
|
|
195
|
+
"dependsOn": "react",
|
|
194
196
|
"template": {
|
|
195
197
|
"styleRef": "→ 参考 [Ant Design 规范](antd.md)"
|
|
196
198
|
},
|
|
@@ -204,6 +206,7 @@
|
|
|
204
206
|
{
|
|
205
207
|
"value": "antd-vue",
|
|
206
208
|
"label": "Ant Design Vue",
|
|
209
|
+
"dependsOn": "vue",
|
|
207
210
|
"template": {
|
|
208
211
|
"styleRef": "→ 参考 [Ant Design Vue 规范](antd-vue.md)"
|
|
209
212
|
},
|
|
@@ -76,30 +76,7 @@ flowchart TD
|
|
|
76
76
|
|
|
77
77
|
### 运行时 MCP 服务发现
|
|
78
78
|
|
|
79
|
-
进入 Stage 1 前,AI SHALL 读取 `.claude/settings.json` → `deepstorm.mcpCapabilities`,确定当前可用的 provider
|
|
80
|
-
|
|
81
|
-
能力映射结构说明:
|
|
82
|
-
|
|
83
|
-
```
|
|
84
|
-
{
|
|
85
|
-
"issue_tracker": {
|
|
86
|
-
"available": true/false, // 是否有可用的 Issue 跟踪服务
|
|
87
|
-
"providers": [ // 可用的 MCP 服务列表
|
|
88
|
-
{ "id": "jira", "label": "Jira" }
|
|
89
|
-
]
|
|
90
|
-
},
|
|
91
|
-
"knowledge_base": {
|
|
92
|
-
"available": true/false, // 是否有可用的知识库服务
|
|
93
|
-
"providers": [...]
|
|
94
|
-
},
|
|
95
|
-
"design_tools": {
|
|
96
|
-
"available": true/false, // 是否有可用的设计工具服务
|
|
97
|
-
"providers": [...]
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
```
|
|
101
|
-
|
|
102
|
-
每个 provider 的 MCP 操作指南按读写方向拆分,位于 `.claude/skills/deepstorm-mcp-{service}-{op}/SKILL.md`。AI 根据当前步骤所需的操作类型读取对应指南(读取 Issue → `deepstorm-mcp-jira-read`、读取文档 → `deepstorm-mcp-feishu-wiki-read`、读取设计稿 → `deepstorm-mcp-figma-read`)。AI 调用前可读取该文件了解工具使用方式。
|
|
79
|
+
进入 Stage 1 前,AI SHALL 读取 `.claude/settings.json` → `deepstorm.mcpCapabilities`,确定当前可用的 provider。每个 provider 的 MCP 操作指南按读写方向拆分,位于 `.claude/skills/deepstorm-mcp-{service}-{op}/SKILL.md`。AI 根据当前步骤所需的操作类型读取对应指南(读取 Issue → `deepstorm-mcp-jira-read`、读取文档 → `deepstorm-mcp-feishu-wiki-read`、读取设计稿 → `deepstorm-mcp-figma-read`)。AI 调用前可读取该文件了解工具使用方式。
|
|
103
80
|
|
|
104
81
|
如果 `deepstorm.mcpCapabilities` 读取失败(文件不存在/格式错误),AI SHALL 降级为"无 MCP 服务安装",按手动模式运行各子步骤。
|
|
105
82
|
|
|
@@ -184,6 +161,17 @@ PRD 上下文获取的详细操作方式见 `.claude/skills/deepstorm-mcp-feishu
|
|
|
184
161
|
|
|
185
162
|
**降级处理:** `design_tools.available === false` 时,告知用户"未检测到设计工具服务,将不生成设计稿摘要"。
|
|
186
163
|
|
|
164
|
+
#### 1.6 更新上下文地图
|
|
165
|
+
|
|
166
|
+
完成需求获取(Issue 详情、PRD、设计稿)后,AI SHALL 对比当前 `.deepstorm/context.md` 与阶段一采集的项目信息,仅在存在实质性变化时执行写入:
|
|
167
|
+
|
|
168
|
+
- **技术栈更新**:确认 Issue 中提到的框架、工具、版本是否与 context.md 一致
|
|
169
|
+
- **关键模块更新**:如果 Issue 涉及新模块或模块边界变化,更新模块表格
|
|
170
|
+
- **历史踩坑**:如果发现新的重要故障或架构决策,记录概要 + 引用路径
|
|
171
|
+
- **外部引用**:记录发现的外部 API 文档、设计系统或业务规范
|
|
172
|
+
|
|
173
|
+
输出更新摘要供用户知晓。如无实质变化,跳过更新,避免无意义的 git 变动。
|
|
174
|
+
|
|
187
175
|
### 🅰️ Path A — 阶段二:创建分支
|
|
188
176
|
|
|
189
177
|
分支命名流程:
|
|
@@ -254,6 +242,17 @@ _bmad-output/brainstorming/brainstorming-session-{date}-{seq}.md
|
|
|
254
242
|
|
|
255
243
|
> **注意**:Path B 不在此处创建 git 分支。分支创建推迟到 superpowers 门禁通过后、TDD 实现开始前(见阶段四入口)。
|
|
256
244
|
|
|
245
|
+
#### B1.5 更新上下文地图
|
|
246
|
+
|
|
247
|
+
产出 brainstorming 文件后,AI SHALL 检查 `.deepstorm/context.md` 是否存在,如不存在则创建模板:
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# 如果 context.md 不存在,创建模板
|
|
251
|
+
deepstorm init --name "$(basename $(pwd))" 2>/dev/null || true
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
如果 context.md 已存在,对比当前讨论中采集的项目信息(技术栈、关键模块、外部引用),有实质性变化时更新并输出摘要。
|
|
255
|
+
|
|
257
256
|
### 🅰️🅱️ 阶段三(共享):openspec SDD 文档生成
|
|
258
257
|
|
|
259
258
|
使用 openspec CLI。Path A 的阶段二已创建分支,分支名即为 change 名。Path B 通过 B1.1 已创建 change:
|
|
@@ -396,56 +395,58 @@ openspec instructions tasks --change "$CHANGE" --json
|
|
|
396
395
|
> - [纪律 2]
|
|
397
396
|
> ```
|
|
398
397
|
|
|
399
|
-
###
|
|
398
|
+
### 🧭 风险路由:选择执行模式
|
|
400
399
|
|
|
401
|
-
|
|
400
|
+
在加载 superpowers 并声明 rigid 纪律**之前**,先执行风险路由判断,确定当前变更使用 **plan mode**(直接实现 + 后置验证)还是 **tdd mode**(完整 RED→GREEN→REFACTOR)。
|
|
402
401
|
|
|
403
|
-
|
|
404
|
-
|
|
402
|
+
#### 判断流程
|
|
403
|
+
|
|
404
|
+
1. **分析变更特征** — 审视 tasks.md 中的变更范围
|
|
405
|
+
- 变更涉及哪些文件类型(代码 / 配置 / 文档)
|
|
406
|
+
- 是否涉及运行时行为改动
|
|
407
|
+
- 是否存在复杂的边界条件或异常路径
|
|
408
|
+
- 现有测试覆盖是否充分
|
|
409
|
+
|
|
410
|
+
2. **查阅风险路由卡** — 以 `references/risk-routing-card.md` 为判断依据
|
|
411
|
+
- 根据变更类型在风险因子对照表中查找推荐模式
|
|
412
|
+
- 检查是否满足 plan mode 的四项决定性特征
|
|
413
|
+
- 如涉及多种变更类型,以最高风险特征为准
|
|
405
414
|
|
|
406
|
-
|
|
415
|
+
3. **输出风险判断表** — 按以下模板输出供用户确认:
|
|
407
416
|
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
417
|
+
```
|
|
418
|
+
### 🧭 风险路由判断
|
|
419
|
+
|
|
420
|
+
| 变更特征 | 判定 |
|
|
421
|
+
|---------|------|
|
|
422
|
+
| 变更类型 | {变更类型描述} |
|
|
423
|
+
| 涉及模块 | {模块列表} |
|
|
424
|
+
| 运行时代码 | {✅ 是 / ❌ 否} |
|
|
425
|
+
| 边界条件 | {有 / 无 / 描述} |
|
|
426
|
+
| 推荐模式 | {🟢 **plan mode** / 🔴 **tdd mode**} |
|
|
427
|
+
|
|
428
|
+
**理由:** {简要说明推荐依据}
|
|
429
|
+
**请确认是否按 {plan/tdd} mode 进入阶段四实现?**
|
|
430
|
+
```
|
|
411
431
|
|
|
412
|
-
|
|
432
|
+
4. **等待用户确认** — 用户确认前不得进入阶段四
|
|
413
433
|
|
|
414
|
-
|
|
415
|
-
- `test-driven-development` 的铁律:**NO PRODUCTION CODE WITHOUT A FAILING TEST FIRST**
|
|
416
|
-
- 配置文件、SKILL.md 模板、markdown 文件豁免 TDD
|
|
434
|
+
#### Mode 切换规则
|
|
417
435
|
|
|
418
|
-
|
|
419
|
-
|
|
436
|
+
- **plan → tdd 允许升级**:实现中发现复杂度超预期时,主动暂停并建议升级
|
|
437
|
+
- **tdd → plan 禁止降级**:一旦判定为 tdd mode,不得以降级为由跳过测试
|
|
420
438
|
|
|
421
|
-
|
|
439
|
+
### 声明模板(按已确定的 mode 输出)
|
|
440
|
+
|
|
441
|
+
加载完所有 superpowers、完成风险路由判断后,按 mode 选择对应模板输出:
|
|
422
442
|
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
-
|
|
426
|
-
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
- [ ] 用户已审阅并批准所有 SDD 文档及实现计划
|
|
431
|
-
- [ ] 🔍 **Superpowers 技能已加载**(Skill 工具已调用)
|
|
432
|
-
- [ ] 🚨 **Rigid 纪律已向用户声明并获得确认**
|
|
433
|
-
- [ ] Path A 检查项:Git 分支已从 main 岔出
|
|
434
|
-
- [ ] Path B 检查项:OpenSpec change 已创建,brainstorming 文件已产出
|
|
435
|
-
|
|
436
|
-
### 🚩 Red Flags — 你正在绕过 Superpowers 检查
|
|
437
|
-
|
|
438
|
-
> 以下每一个想法都是一个危险信号。**任何一个出现 → 立即停止 → 回到本步骤执行 superpowers 检查。**
|
|
439
|
-
|
|
440
|
-
| 想法 | 现实 |
|
|
441
|
-
|------|------|
|
|
442
|
-
| "tasks + plan 都完成了,直接实现吧" | ❌ 必须先走完 3.8 语言规范 → 3.9 用户确认 → Superpowers 门禁。plan 生成 ≠ 可以跳过后续步骤。 |
|
|
443
|
-
| "tasks 完成了,直接进入实现吧" | ❌ 必须先检查 superpowers。顺序不可颠倒。 |
|
|
444
|
-
| "这个变更很简单,不需要检查" | 只要有 1% 的可能性适用,就**必须**检查。 |
|
|
445
|
-
| "我知道 TDD 是什么,不用加载技能" | 技能会更新。加载当前版本才有效。 |
|
|
446
|
-
| "先搞快点,后面再补测试" | 补 = 不补。不可协商的纪律。 |
|
|
447
|
-
| "子代理一次性写代码效率高,TDD 太慢" | TDD 铁律优先于效率。质量不可妥协。 |
|
|
448
|
-
| "已经改了代码,回头补测试也一样" | 测试-after 和 TDD 不等价。测试-after 验证的是"代码做了什么",不是"代码应该做什么"。 |
|
|
443
|
+
执行[门闸声明]时,SEE: references/superpowers-gate.md
|
|
444
|
+
- 声明模板 → 见该文件"Plan Mode / TDD Mode 声明模板"
|
|
445
|
+
- 安全检查清单 → 见该文件"安全检查清单"
|
|
446
|
+
- Red Flags → 见该文件"Red Flags"
|
|
447
|
+
AI SHALL 在完成风险路由判断、输出 mode 声明前读取该文件。
|
|
448
|
+
|
|
449
|
+
**声明后等待用户确认。用户未确认前不得进入实现阶段。**
|
|
449
450
|
|
|
450
451
|
---
|
|
451
452
|
|
|
@@ -453,99 +454,74 @@ openspec instructions tasks --change "$CHANGE" --json
|
|
|
453
454
|
|
|
454
455
|
```mermaid
|
|
455
456
|
flowchart TD
|
|
456
|
-
CHK["⛔ 门闸通过"] -->
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
457
|
+
CHK["⛔ 门闸通过"] --> MODE{"风险路由<br/>选择执行模式"}
|
|
458
|
+
MODE -->|"🟢 Plan Mode"| PLAN["plan mode 分支"]
|
|
459
|
+
MODE -->|"🔴 TDD Mode"| TDD["tdd mode 分支"]
|
|
460
|
+
MODE -->|"不确定"| CONFIRM["由用户确认模式"]
|
|
461
|
+
CONFIRM --> PLAN
|
|
462
|
+
CONFIRM --> TDD
|
|
463
|
+
|
|
464
|
+
subgraph PLAN["🟢 Plan Mode 路径"]
|
|
465
|
+
PLAN_ENTRY["plan mode 入口"] --> P_BRANCH{"Path B 且<br/>分支未创建?"}
|
|
466
|
+
P_BRANCH -->|"是"| P_BR["创建 git 分支"]
|
|
467
|
+
P_BRANCH -->|"否"| P_NEXT{"还有未完成的 task ?"}
|
|
468
|
+
P_BR --> P_NEXT
|
|
469
|
+
P_NEXT -->|"有"| P_DIR["直接实现"]
|
|
470
|
+
P_DIR --> P_VERIFY["后置验证<br/>build → lint → test"]
|
|
471
|
+
P_VERIFY -->|"通过"| P_MARK["✅ 标记完成"]
|
|
472
|
+
P_VERIFY -->|"失败"| P_FIX["修复后重验"]
|
|
473
|
+
P_FIX --> P_VERIFY
|
|
474
|
+
P_MARK --> P_NEXT
|
|
475
|
+
P_NEXT -->|"无"| OUT["→ code-audit"]
|
|
476
|
+
end
|
|
477
|
+
|
|
478
|
+
subgraph TDD["🔴 TDD Mode 路径"]
|
|
479
|
+
T_ENTRY["tdd mode 入口"] --> T_BRANCH{"Path B 且<br/>分支未创建?"}
|
|
480
|
+
T_BRANCH -->|"是"| T_BR["创建 git 分支"]
|
|
481
|
+
T_BRANCH -->|"否"| T_NEXT{"还有未完成的 task ?"}
|
|
482
|
+
T_BR --> T_NEXT
|
|
483
|
+
T_NEXT -->|"有"| T_J{"涉及代码<br/>行为改动?"}
|
|
484
|
+
T_J -->|"是"| RED["🔴 RED<br/>编写测试<br/>预期失败"]
|
|
485
|
+
T_J -->|"否"| TT{"Task 具体类型?"}
|
|
486
|
+
TT -->|"纯配置 / markdown /<br>SKILL.md / Shell"| T_DIR["直接实现"]
|
|
487
|
+
TT -->|"测试框架<br>基础设施搭建"| FRAME["先创建框架<br>后续代码用 TDD"]
|
|
488
|
+
RED --> GREEN["🟢 GREEN<br/>写最小实现<br/>通过测试"]
|
|
489
|
+
GREEN --> REFACTOR["🔵 REFACTOR<br/>重构优化<br/>保持测试通过"]
|
|
490
|
+
REFACTOR --> T_VERIFY["后置验证<br/>build → lint → test"]
|
|
491
|
+
T_DIR --> T_VERIFY
|
|
492
|
+
FRAME --> T_VERIFY
|
|
493
|
+
T_VERIFY -->|"通过"| T_MARK["✅ 标记完成"]
|
|
494
|
+
T_VERIFY -->|"失败"| T_FIX["修复后重验"]
|
|
495
|
+
T_FIX --> T_VERIFY
|
|
496
|
+
T_MARK --> T_NEXT
|
|
497
|
+
T_NEXT -->|"无"| T_OUT["→ code-audit"]
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
OUT --> CA["4.4 code-audit"]
|
|
501
|
+
T_OUT --> CA
|
|
502
|
+
CA -->|"通过"| VR["4.4 生成验证报告"]
|
|
473
503
|
CA -->|"失败"| REPAIR["修复后重跑"]
|
|
474
504
|
REPAIR --> CA
|
|
505
|
+
VR -->|"确认"| SYNC["openspec sync --change"]
|
|
475
506
|
SYNC --> END["4.5 分支结束处理<br/>提交 / PR / 保留 / 丢弃"]
|
|
476
507
|
```
|
|
477
508
|
|
|
478
509
|
### 核心原则
|
|
479
510
|
|
|
480
|
-
-
|
|
481
|
-
-
|
|
482
|
-
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
```bash
|
|
496
|
-
# 获取 change 名
|
|
497
|
-
CHANGE=$(ls openspec/changes/ | sort -r | head -1)
|
|
498
|
-
# 创建分支
|
|
499
|
-
git stash push -m "reef-start-auto-stash" 2>/dev/null || true
|
|
500
|
-
git checkout main && git fetch origin main && git reset --hard origin/main
|
|
501
|
-
git checkout -b "$CHANGE"
|
|
502
|
-
git stash pop 2>/dev/null || true
|
|
503
|
-
# 记录计划文件路径
|
|
504
|
-
PLAN_FILE="docs/superpowers/plans/$(date +%Y-%m-%d)-$CHANGE.md"
|
|
505
|
-
```
|
|
506
|
-
|
|
507
|
-
如果 `$PLAN_FILE` 存在,读取实现计划,按 plan 中的 task 分解顺序逐 task 实现。计划中的每个 task 已包含完整的文件路径、测试代码、实现代码和提交步骤。
|
|
508
|
-
|
|
509
|
-
#### 4.2 逐 task TDD 实现
|
|
510
|
-
|
|
511
|
-
**🔴 RED — 先写测试**
|
|
512
|
-
- 根据 spec 的 Scenario 编写单元测试
|
|
513
|
-
- 运行测试,确认失败(红)
|
|
514
|
-
- 如果测试意外通过了,说明测试写的太弱,需改进
|
|
515
|
-
- **不写实现代码**
|
|
516
|
-
|
|
517
|
-
**🟢 GREEN — 最小实现**
|
|
518
|
-
- 只写让当前测试通过的最小代码量
|
|
519
|
-
- 不提前实现未测试的功能
|
|
520
|
-
- 运行测试,确认全绿
|
|
521
|
-
- 如果感觉"这段代码还没写完",那是正常的 — 下一个 task 会覆盖
|
|
522
|
-
|
|
523
|
-
**🔵 REFACTOR — 保持测试通过的前提下重构**
|
|
524
|
-
- 清理重复代码、提取函数、重命名
|
|
525
|
-
- 保持测试运行通过
|
|
526
|
-
- 不改变行为
|
|
527
|
-
|
|
528
|
-
**完成一个 task 后:**
|
|
529
|
-
1. 标记 tasks.md 中对应项为 `- [x]`
|
|
530
|
-
2. 如 `$PLAN_FILE` 存在,同步标记 plan 中对应步骤为 `- [x]`
|
|
531
|
-
3. 运行完整测试套件确认没有回归
|
|
532
|
-
4. 进入下一个 task(参照 plan 中的步骤顺序)
|
|
533
|
-
5. 如遇到阻塞或模糊需求,暂停并询问用户
|
|
534
|
-
|
|
535
|
-
#### 4.3 全部任务完成后的 code-audit
|
|
536
|
-
|
|
537
|
-
加载 `reef:reef-review` skill。检测变更范围,并行派发 agent。全部通过后执行 `openspec sync --change "$CHANGE"`。
|
|
538
|
-
|
|
539
|
-
#### 4.4 分支结束处理
|
|
540
|
-
|
|
541
|
-
询问用户:**创建提交 / 创建 PR / 保留分支 / 丢弃分支**
|
|
542
|
-
|
|
543
|
-
| 操作 | 说明 |
|
|
544
|
-
|------|------|
|
|
545
|
-
| 创建提交 | 中文 message + Issue URL(Path A 有则加,Path B 可选) + PRD 链接(如有) |
|
|
546
|
-
| 创建 PR | `git push -u origin "$CHANGE"` → `gh pr create` |
|
|
547
|
-
| 保留分支 | 报告分支名和变更位置 |
|
|
548
|
-
| 丢弃分支 | 用户确认后删除 |
|
|
511
|
+
- **实现阶段根据风险路由确定的 mode 执行对应纪律**
|
|
512
|
+
- **TDD Mode 下**:遵循 RED → GREEN → REFACTOR 循环,每个涉及代码行为改动的 task 第一步永远是写测试(RED)
|
|
513
|
+
- **Plan Mode 下**:先直接实现,再后置验证(build → lint → test),通过后才标完成
|
|
514
|
+
- **Plan Mode 中复杂度超预期时**:主动暂停并建议升级为 tdd mode(plan→tdd 升级允许,tdd→plan 禁止降级)
|
|
515
|
+
- 配置文件、SKILL.md 模板、markdown 文件豁免 TDD(在 plan mode 下豁免后置验证,但建议检查)
|
|
516
|
+
|
|
517
|
+
执行阶段四时,SEE: references/stage-4-implementation.md
|
|
518
|
+
- 4.1 准备工作 → 见该文件"4.1 准备工作"
|
|
519
|
+
- 4.2 逐 task 实现 → 见该文件"4.2 逐 task 实现"
|
|
520
|
+
- 验证命令表 → 见该文件"框架自适应验证命令"
|
|
521
|
+
- 4.3 code-audit → 见该文件"4.3 全部任务完成后的 code-audit"
|
|
522
|
+
- 4.4 验证报告 → 见该文件"4.4 生成验证报告"
|
|
523
|
+
- 4.5 分支结束 → 见该文件"4.5 分支结束处理"
|
|
524
|
+
AI SHALL 在进入阶段四前读取 references/stage-4-implementation.md 了解实现细节。
|
|
549
525
|
|
|
550
526
|
## 关键原则
|
|
551
527
|
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# 风险路由卡 — plan / tdd Mode 选择参考
|
|
2
|
+
|
|
3
|
+
> 在 superpowers 门禁阶段(阶段三→四之间)根据变更类型和风险级别,自动推荐 plan mode(直接实现 + 后置验证)或 tdd mode(完整 RED→GREEN→REFACTOR 循环)。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 风险因子 → Mode 对照表
|
|
8
|
+
|
|
9
|
+
| 变更类型 | 示例 | 推荐 Mode | 依据 |
|
|
10
|
+
|---------|------|-----------|------|
|
|
11
|
+
| 文档修改 | `.md` 文件内容调整、注释修改 | **plan** | 无行为逻辑,直接可验证 |
|
|
12
|
+
| 配置文件 | `.json` / `.yaml` / `.toml` 配置项调整 | **plan** | 结构确定,验证成本低 |
|
|
13
|
+
| SKILL.md / 流程文档 | 流程描述修改、检查清单增删 | **plan** | 纯文档,无运行时行为 |
|
|
14
|
+
| 测试框架基础设施搭建 | 初始化 vitest / jest / pytest 配置 | **plan** | 脚手架性质,无业务逻辑 |
|
|
15
|
+
| 简单重构(测试覆盖充分) | 提取函数、重命名、移动文件 | **plan** | 已有测试覆盖(>80%)可验证 |
|
|
16
|
+
| 简单重构(测试覆盖不足) | 同上但测试覆盖 < 80% | **tdd** | 需先补测试再重构 |
|
|
17
|
+
| 新增业务逻辑 | Controller / Service / Repository 新增 | **tdd** | 行为变更需先写测试 |
|
|
18
|
+
| Bug 修复 | 功能缺陷修复 | **tdd** | 先写回归测试再修复 |
|
|
19
|
+
| 权限 / 安全变更 | 权限校验、鉴权逻辑、数据脱敏 | **tdd** | 高风险,需完整测试覆盖 |
|
|
20
|
+
| 资金 / 计费变更 | 金额计算、支付流程、账单生成 | **tdd** | 高风险,需完整测试覆盖,标记高优先级 |
|
|
21
|
+
| 幂等性 / 数据库迁移 | 数据库脚本、数据迁移、重入逻辑 | **tdd** | 幂等性需严格验证 |
|
|
22
|
+
| 状态机逻辑 | 状态流转、事件驱动 | **tdd** | 状态组合复杂,需全覆盖 |
|
|
23
|
+
| 并发 / 异步逻辑 | 线程、协程、消息队列消费 | **tdd** | 竞态条件需测试验证 |
|
|
24
|
+
| 不确定风险等级 | 无法明确归类 | **默认 auto** | Agent 推荐后人工确认 |
|
|
25
|
+
|
|
26
|
+
## Plan Mode 决定性特征
|
|
27
|
+
|
|
28
|
+
以下特征**同时**满足时,变更适合 plan mode:
|
|
29
|
+
|
|
30
|
+
1. ✅ **无运行时行为变更** — 不改变程序的控制流、数据流或副作用
|
|
31
|
+
2. ✅ **结果可目视验证** — 变更正确性可通过肉眼 / diff 确认
|
|
32
|
+
3. ✅ **无隐藏边界条件** — 不存在需要测试才能发现的边缘情况
|
|
33
|
+
4. ✅ **回滚成本低** — 出错后可以无风险回退
|
|
34
|
+
|
|
35
|
+
**缺少任何一个特征 → 推荐 tdd mode。**
|
|
36
|
+
|
|
37
|
+
## Plan vs TDD 执行策略差异表
|
|
38
|
+
|
|
39
|
+
| 维度 | Plan Mode | TDD Mode |
|
|
40
|
+
|------|-----------|----------|
|
|
41
|
+
| **实现前** | 直接实现 | 🔴 先写测试(RED) |
|
|
42
|
+
| **实现中** | 持续关注复杂度超预期信号 | 🟢 写最小实现代码 |
|
|
43
|
+
| **后置验证** | build → lint → test **必须全过** | 🔵 重构 → build → lint → test |
|
|
44
|
+
| **验证失败处理** | 修复后重新验证,通过才标完成 | 同左 |
|
|
45
|
+
| **测试编写** | 后置验证阶段不要求新测试 | 前置 RED 阶段已完成 |
|
|
46
|
+
| **代码审查** | 同标准 code-audit | 同标准 code-audit |
|
|
47
|
+
| **复杂度超预期** | 主动升级为 tdd mode | 不允许降级 |
|
|
48
|
+
|
|
49
|
+
## 模式选择规则
|
|
50
|
+
|
|
51
|
+
### 规则 1:plan → tdd 允许升级
|
|
52
|
+
|
|
53
|
+
Agent 在 plan mode 实现过程中,如发现变更复杂度超出预期(涉及多模块联动、边界条件复杂、异常路径多),**SHALL 主动暂停**,向用户声明并建议升级为 tdd mode。用户确认后方可切换。
|
|
54
|
+
|
|
55
|
+
**升级信号:**
|
|
56
|
+
- 实现时发现需要修改 3+ 个模块
|
|
57
|
+
- 发现隐藏的边界条件或并发问题
|
|
58
|
+
- 发现现有测试覆盖率不足且无法目视确认正确性
|
|
59
|
+
- 实现过程中引入了新的控制流分支
|
|
60
|
+
|
|
61
|
+
### 规则 2:tdd → plan 禁止降级
|
|
62
|
+
|
|
63
|
+
一旦 superpowers 门禁判定为 tdd mode,Agent **SHALL NOT** 以任何理由降级为 plan mode。即使实现过程中发现变更比预期简单,也必须完成完整的 RED→GREEN→REFACTOR 循环。
|
|
64
|
+
|
|
65
|
+
**常见违规场景(禁止):**
|
|
66
|
+
- "这个 task 其实很简单,直接改吧" → ❌ 违规
|
|
67
|
+
- "测试已经覆盖了,不写新测试直接改" → ❌ 违规(对于 tdd mode task)
|
|
68
|
+
- "现在补测试太慢,先改后面再补" → ❌ 违规
|
|
69
|
+
|
|
70
|
+
### 规则 3:默认 auto 模式
|
|
71
|
+
|
|
72
|
+
风险路由**默认自动推荐**。Agent 在 superpowers 门禁中:
|
|
73
|
+
1. 根据变更类型和风险因子,输出风险判断表 + 推荐模式 + 推荐理由
|
|
74
|
+
2. **等待用户确认后**,方可进入阶段四
|
|
75
|
+
|
|
76
|
+
### 规则 4:冲突时以高风险为准
|
|
77
|
+
|
|
78
|
+
当变更同时涉及 plan 和 tdd 特征(如新增 API + 修改配置文件),**以最高风险特征为准**,推荐 tdd mode。
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 输出模板
|
|
83
|
+
|
|
84
|
+
在 superpowers 门禁中输出以下内容供用户确认:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
### 风险路由判断
|
|
88
|
+
|
|
89
|
+
| 变更特征 | 判定 |
|
|
90
|
+
|---------|------|
|
|
91
|
+
| 变更类型 | 新增用户注册 API(Controller + Service) |
|
|
92
|
+
| 涉及模块 | user-controller, user-service, user-repository |
|
|
93
|
+
| 运行时代码 | ✅ 是 |
|
|
94
|
+
| 边界条件 | 邮箱格式、密码强度、重复注册 |
|
|
95
|
+
| 推荐模式 | 🔴 **tdd mode** |
|
|
96
|
+
|
|
97
|
+
**理由:** 新增业务逻辑涉及多个模块联动(Controller/Service/Repository),
|
|
98
|
+
且有明确的边界条件和异常路径,需要完整的 RED→GREEN→REFACTOR 循环确保质量。
|
|
99
|
+
|
|
100
|
+
**请确认是否按 tdd mode 进入阶段四实现?**
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
---
|
|
104
|
+
|
|
105
|
+
## 参考
|
|
106
|
+
|
|
107
|
+
- 本卡与 spec-hardener、writing-plans 无冲突关系——风险路由在 superpowers 门禁中选择 mode,spec-hardener 和 writing-plans 在 mode 确定后按对应执行策略执行
|
|
108
|
+
- 本卡是参考文档,最终模式选择以用户确认为准
|