cc-devflow 1.0.2 → 2.4.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/.claude/CLAUDE.md +123 -4
- package/.claude/agents/code-quality-reviewer.md +205 -0
- package/.claude/agents/spec-reviewer.md +221 -0
- package/.claude/commands/cancel-ralph.md +59 -0
- package/.claude/commands/flow-dev.md +202 -21
- package/.claude/commands/flow-epic.md +33 -0
- package/.claude/commands/flow-fix.md +138 -20
- package/.claude/commands/flow-init.md +104 -15
- package/.claude/commands/flow-new.md +84 -35
- package/.claude/commands/flow-prd.md +16 -3
- package/.claude/commands/flow-release.md +33 -0
- package/.claude/commands/flow-review.md +257 -0
- package/.claude/docs/templates/ATTEMPT_TEMPLATE.md +156 -0
- package/.claude/docs/templates/BRAINSTORM_TEMPLATE.md +148 -0
- package/.claude/docs/templates/ERROR_LOG_TEMPLATE.md +80 -0
- package/.claude/docs/templates/INIT_FLOW_TEMPLATE.md +22 -14
- package/.claude/guides/workflow-guides/flow-orchestrator.md +2 -2
- package/.claude/hooks/hooks.json +15 -0
- package/.claude/hooks/ralph-stop-hook.sh +190 -0
- package/.claude/rules/devflow-conventions.md +3 -1
- package/.claude/rules/project-constitution.md +256 -2
- package/.claude/rules/rationalization-library.md +282 -0
- package/.claude/scripts/create-requirement.sh +19 -6
- package/.claude/scripts/setup-ralph-loop.sh +155 -0
- package/.claude/scripts/verify-gate.sh +269 -0
- package/.claude/skills/cc-devflow-orchestrator/SKILL.md +70 -20
- package/.claude/skills/file-header-guardian/SKILL.md +56 -0
- package/.claude/skills/flow-attention-refresh/SKILL.md +170 -0
- package/.claude/skills/flow-brainstorming/SKILL.md +161 -0
- package/.claude/skills/flow-debugging/SKILL.md +221 -0
- package/.claude/skills/flow-finishing-branch/SKILL.md +189 -0
- package/.claude/skills/flow-receiving-review/SKILL.md +153 -0
- package/.claude/skills/flow-tdd/SKILL.md +218 -0
- package/.claude/skills/fractal-docs-generator/SKILL.md +45 -0
- package/.claude/skills/skill-rules.json +75 -0
- package/.claude/skills/verification-before-completion/SKILL.md +158 -0
- package/.claude/tsc-cache/777aa1de-497e-411b-a40f-13b74efcec58/edited-files.log +2 -1
- package/README.md +104 -19
- package/README.zh-CN.md +79 -1
- package/docs/commands/flow-init.md +3 -1
- package/docs/commands/flow-init.zh-CN.md +3 -1
- package/package.json +2 -2
- package/.claude/tsc-cache/777aa1de-497e-411b-a40f-13b74efcec58/affected-repos.txt +0 -1
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-review
|
|
3
|
+
description: 'Two-Stage Code Review. Usage: /flow-review "REQ-123" or /flow-review'
|
|
4
|
+
agents:
|
|
5
|
+
spec: .claude/agents/spec-reviewer.md
|
|
6
|
+
quality: .claude/agents/code-reviewer.md
|
|
7
|
+
skills:
|
|
8
|
+
verification: .claude/skills/verification-before-completion/SKILL.md
|
|
9
|
+
receiving: .claude/skills/flow-receiving-review/SKILL.md
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# Flow-Review - 两阶段代码审查
|
|
13
|
+
|
|
14
|
+
## User Input
|
|
15
|
+
|
|
16
|
+
```text
|
|
17
|
+
$ARGUMENTS = "REQ_ID" 或 空 (自动检测当前分支)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**示例**:
|
|
21
|
+
```
|
|
22
|
+
/flow-review "REQ-123"
|
|
23
|
+
/flow-review # 自动从分支名提取 REQ-ID
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 核心理念
|
|
29
|
+
|
|
30
|
+
### Two-Stage Review
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
Stage 1: SPEC COMPLIANCE (先)
|
|
34
|
+
┌─────────────────────────────────────────┐
|
|
35
|
+
│ • 加载 PRD, EPIC, TASKS, BRAINSTORM │
|
|
36
|
+
│ • 创建需求清单 │
|
|
37
|
+
│ • 逐项验证(不信任实现者报告) │
|
|
38
|
+
│ • 检查超范围(scope creep) │
|
|
39
|
+
│ • 输出: SPEC_REVIEW.md │
|
|
40
|
+
└─────────────────────────────────────────┘
|
|
41
|
+
↓ Pass?
|
|
42
|
+
Stage 2: CODE QUALITY (后)
|
|
43
|
+
┌─────────────────────────────────────────┐
|
|
44
|
+
│ • 代码清晰度、结构、命名 │
|
|
45
|
+
│ • 测试质量和覆盖率 │
|
|
46
|
+
│ • Constitution 合规 │
|
|
47
|
+
│ • 性能和安全 │
|
|
48
|
+
│ • 输出: CODE_QUALITY_REVIEW.md │
|
|
49
|
+
└─────────────────────────────────────────┘
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
**关键**: Stage 2 只在 Stage 1 通过后执行。
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## 执行流程
|
|
57
|
+
|
|
58
|
+
### Stage 0: Entry Gate
|
|
59
|
+
|
|
60
|
+
```yaml
|
|
61
|
+
1. 解析 REQ_ID
|
|
62
|
+
→ 从参数获取,或从分支名提取 (feature/REQ-123-xxx)
|
|
63
|
+
|
|
64
|
+
2. 验证需求目录存在
|
|
65
|
+
→ devflow/requirements/${REQ_ID}/
|
|
66
|
+
|
|
67
|
+
3. 加载必需文档
|
|
68
|
+
→ PRD.md, EPIC.md, TASKS.md, BRAINSTORM.md
|
|
69
|
+
|
|
70
|
+
4. 检查实现状态
|
|
71
|
+
→ TASKS.md 中所有任务标记为完成
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
### Stage 1: Spec Compliance Review
|
|
77
|
+
|
|
78
|
+
**调用**: `{AGENT:spec}` (spec-reviewer)
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
执行:
|
|
82
|
+
1. 构建需求清单
|
|
83
|
+
→ 从 PRD 提取验收标准
|
|
84
|
+
→ 从 TASKS 提取预期结果
|
|
85
|
+
|
|
86
|
+
2. 代码验证 (不信任报告)
|
|
87
|
+
→ 读取实际代码
|
|
88
|
+
→ 逐项验证实现
|
|
89
|
+
→ 标记: ✅ 实现 | ❌ 缺失 | ⚠️ 部分 | 🚫 超范围
|
|
90
|
+
|
|
91
|
+
3. Scope Creep 检测
|
|
92
|
+
→ 扫描未在规格中的功能
|
|
93
|
+
→ 每个额外功能 = 缺陷
|
|
94
|
+
|
|
95
|
+
4. BRAINSTORM 对齐检查
|
|
96
|
+
→ 是否解决原始问题
|
|
97
|
+
→ 是否遵循选定方案
|
|
98
|
+
|
|
99
|
+
输出: devflow/requirements/${REQ_ID}/SPEC_REVIEW.md
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
**通过条件**:
|
|
103
|
+
- 所有需求项标记为 ✅
|
|
104
|
+
- 无 Scope Creep (🚫)
|
|
105
|
+
- BRAINSTORM 对齐
|
|
106
|
+
|
|
107
|
+
**失败处理**:
|
|
108
|
+
```yaml
|
|
109
|
+
如果 Stage 1 失败:
|
|
110
|
+
→ 输出 SPEC_REVIEW.md 包含失败项
|
|
111
|
+
→ 列出必需修复项
|
|
112
|
+
→ 停止,不进入 Stage 2
|
|
113
|
+
→ 返回给开发者修复
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
### Stage 2: Code Quality Review
|
|
119
|
+
|
|
120
|
+
**前置**: Stage 1 必须通过
|
|
121
|
+
|
|
122
|
+
**调用**: `{AGENT:quality}` (code-reviewer)
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
执行:
|
|
126
|
+
1. 代码清晰度
|
|
127
|
+
→ 命名是否清晰
|
|
128
|
+
→ 结构是否合理
|
|
129
|
+
→ 注释是否必要且有用
|
|
130
|
+
|
|
131
|
+
2. 测试质量
|
|
132
|
+
→ 覆盖率 ≥ 80%
|
|
133
|
+
→ 测试是否有意义 (非 cheater tests)
|
|
134
|
+
→ 边界情况是否覆盖
|
|
135
|
+
|
|
136
|
+
3. Constitution 合规
|
|
137
|
+
→ Article I: 完整实现
|
|
138
|
+
→ Article II: 无重复代码
|
|
139
|
+
→ Article III: 无硬编码密钥
|
|
140
|
+
→ Article IV: 无资源泄漏
|
|
141
|
+
→ Article V: 无死代码
|
|
142
|
+
→ Article VI: TDD 顺序
|
|
143
|
+
|
|
144
|
+
4. 性能和安全
|
|
145
|
+
→ 无明显性能问题
|
|
146
|
+
→ 无安全漏洞
|
|
147
|
+
|
|
148
|
+
输出: devflow/requirements/${REQ_ID}/CODE_QUALITY_REVIEW.md
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
### Stage 3: Exit Gate
|
|
154
|
+
|
|
155
|
+
```yaml
|
|
156
|
+
验证:
|
|
157
|
+
1. SPEC_REVIEW.md 状态 = PASS
|
|
158
|
+
2. CODE_QUALITY_REVIEW.md 状态 = PASS
|
|
159
|
+
3. 所有阻塞问题已解决
|
|
160
|
+
|
|
161
|
+
输出:
|
|
162
|
+
→ 更新 orchestration_status.json
|
|
163
|
+
→ 记录到 EXECUTION_LOG.md
|
|
164
|
+
```
|
|
165
|
+
|
|
166
|
+
---
|
|
167
|
+
|
|
168
|
+
## 输出产物
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
devflow/requirements/${REQ_ID}/
|
|
172
|
+
├── SPEC_REVIEW.md # Stage 1 输出
|
|
173
|
+
├── CODE_QUALITY_REVIEW.md # Stage 2 输出
|
|
174
|
+
└── EXECUTION_LOG.md # 更新
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
---
|
|
178
|
+
|
|
179
|
+
## 收到审查反馈后
|
|
180
|
+
|
|
181
|
+
当收到审查反馈时,使用 `{SKILL:receiving}` 原则:
|
|
182
|
+
|
|
183
|
+
```yaml
|
|
184
|
+
处理反馈:
|
|
185
|
+
1. 不盲目同意
|
|
186
|
+
→ 反馈可能有误
|
|
187
|
+
→ 技术上可疑?先验证
|
|
188
|
+
|
|
189
|
+
2. 不清楚?提问澄清
|
|
190
|
+
→ "这个建议的具体原因是什么?"
|
|
191
|
+
→ "能否提供示例?"
|
|
192
|
+
|
|
193
|
+
3. 验证后再实现
|
|
194
|
+
→ 确认建议正确
|
|
195
|
+
→ 然后实施修改
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
---
|
|
199
|
+
|
|
200
|
+
## Rationalization Prevention
|
|
201
|
+
|
|
202
|
+
| Excuse | Reality |
|
|
203
|
+
|--------|---------|
|
|
204
|
+
| "实现者说完成了" | 读代码验证。不信任报告。 |
|
|
205
|
+
| "测试通过了" | 测试可能不覆盖所有需求。 |
|
|
206
|
+
| "差不多就行" | 差不多 ≠ 正确。规格是契约。 |
|
|
207
|
+
| "额外功能是好事" | 额外 = scope creep = 缺陷。 |
|
|
208
|
+
| "Stage 1 太严格" | 严格是为了质量。不妥协。 |
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## 错误处理
|
|
213
|
+
|
|
214
|
+
### Stage 1 失败
|
|
215
|
+
|
|
216
|
+
```yaml
|
|
217
|
+
输出:
|
|
218
|
+
- SPEC_REVIEW.md (包含失败项)
|
|
219
|
+
- 必需修复清单
|
|
220
|
+
|
|
221
|
+
下一步:
|
|
222
|
+
- 开发者修复缺失/超范围项
|
|
223
|
+
- 重新运行 /flow-review
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
### Stage 2 失败
|
|
227
|
+
|
|
228
|
+
```yaml
|
|
229
|
+
输出:
|
|
230
|
+
- CODE_QUALITY_REVIEW.md (包含问题)
|
|
231
|
+
- 改进建议
|
|
232
|
+
|
|
233
|
+
下一步:
|
|
234
|
+
- 开发者修复质量问题
|
|
235
|
+
- 重新运行 /flow-review
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Next Step
|
|
241
|
+
|
|
242
|
+
```
|
|
243
|
+
/flow-qa "${REQ_ID}"
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
进入 QA 测试阶段
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
**Related Documentation**:
|
|
251
|
+
- [spec-reviewer.md](../.claude/agents/spec-reviewer.md) - Stage 1 Agent
|
|
252
|
+
- [code-reviewer.md](../.claude/agents/code-reviewer.md) - Stage 2 Agent
|
|
253
|
+
- [verification-before-completion](../.claude/skills/verification-before-completion/SKILL.md) - 验证技能
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
**[PROTOCOL]**: 变更时更新此头部,然后检查 CLAUDE.md
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
# Research Attempt Template
|
|
2
|
+
|
|
3
|
+
> 本模板用于记录研究阶段的失败尝试。失败是学习数据,记录下来避免重复错误。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 文件命名规范
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
research/attempts/NNN-descriptive-name.md
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
**示例**:
|
|
14
|
+
- `001-graphql-approach.md` - 尝试 GraphQL,因性能问题放弃
|
|
15
|
+
- `002-rest-pagination.md` - 尝试偏移分页,改用游标分页
|
|
16
|
+
- `003-redis-cache.md` - 尝试 Redis 缓存,因成本放弃
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 模板内容
|
|
21
|
+
|
|
22
|
+
```markdown
|
|
23
|
+
# Attempt: [方案名]
|
|
24
|
+
|
|
25
|
+
**Date**: YYYY-MM-DD
|
|
26
|
+
**Context**: 解决 [什么问题]
|
|
27
|
+
|
|
28
|
+
## Approach
|
|
29
|
+
|
|
30
|
+
[描述尝试的方案]
|
|
31
|
+
|
|
32
|
+
## Result
|
|
33
|
+
|
|
34
|
+
❌ 失败 / ⚠️ 部分成功 / 🔄 放弃
|
|
35
|
+
|
|
36
|
+
## Reason
|
|
37
|
+
|
|
38
|
+
[为什么不行]
|
|
39
|
+
|
|
40
|
+
## Learning
|
|
41
|
+
|
|
42
|
+
[下次应该注意什么]
|
|
43
|
+
|
|
44
|
+
## References
|
|
45
|
+
|
|
46
|
+
- [相关文档链接]
|
|
47
|
+
- [相关代码片段]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## 示例 1: 放弃 GraphQL
|
|
53
|
+
|
|
54
|
+
```markdown
|
|
55
|
+
# Attempt: GraphQL API Architecture
|
|
56
|
+
|
|
57
|
+
**Date**: 2026-01-08
|
|
58
|
+
**Context**: 解决前后端 API 通信,考虑使用 GraphQL 代替 REST
|
|
59
|
+
|
|
60
|
+
## Approach
|
|
61
|
+
|
|
62
|
+
使用 Apollo Server + GraphQL Schema 定义 API:
|
|
63
|
+
- 单一端点 /graphql
|
|
64
|
+
- 客户端按需查询字段
|
|
65
|
+
- 减少 over-fetching 和 under-fetching
|
|
66
|
+
|
|
67
|
+
## Result
|
|
68
|
+
|
|
69
|
+
🔄 放弃
|
|
70
|
+
|
|
71
|
+
## Reason
|
|
72
|
+
|
|
73
|
+
1. **学习曲线**: 团队对 GraphQL 不熟悉,估计学习时间 2 周
|
|
74
|
+
2. **工具链复杂**: 需要 Apollo Client, Codegen, Schema Stitching
|
|
75
|
+
3. **Overkill**: 当前需求只有 5 个简单 CRUD 端点,REST 足够
|
|
76
|
+
4. **成本**: GraphQL 服务器性能优化成本高(N+1 查询问题)
|
|
77
|
+
|
|
78
|
+
## Learning
|
|
79
|
+
|
|
80
|
+
- **YAGNI**: GraphQL 解决的问题(灵活查询、版本管理)当前不存在
|
|
81
|
+
- **下次应该**: 先用 REST,等到真正需要灵活查询时再迁移
|
|
82
|
+
- **决策原则**: 技术选型看当前需求,不为未来需求过度设计
|
|
83
|
+
|
|
84
|
+
## References
|
|
85
|
+
|
|
86
|
+
- [Apollo Server 官方文档](https://www.apollographql.com/docs/apollo-server/)
|
|
87
|
+
- [GraphQL N+1 问题分析](https://example.com/graphql-n-plus-1)
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
---
|
|
91
|
+
|
|
92
|
+
## 示例 2: 偏移分页改用游标分页
|
|
93
|
+
|
|
94
|
+
```markdown
|
|
95
|
+
# Attempt: Offset-based Pagination
|
|
96
|
+
|
|
97
|
+
**Date**: 2026-01-08
|
|
98
|
+
**Context**: 实现用户列表分页,最初选择偏移分页(offset/limit)
|
|
99
|
+
|
|
100
|
+
## Approach
|
|
101
|
+
|
|
102
|
+
使用 SQL OFFSET/LIMIT:
|
|
103
|
+
```sql
|
|
104
|
+
SELECT * FROM users
|
|
105
|
+
ORDER BY created_at DESC
|
|
106
|
+
LIMIT 20 OFFSET 40
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Result
|
|
110
|
+
|
|
111
|
+
⚠️ 部分成功(实现了但性能差)
|
|
112
|
+
|
|
113
|
+
## Reason
|
|
114
|
+
|
|
115
|
+
1. **性能问题**: OFFSET 40000 时查询时间 >2 秒(需扫描前 40000 行)
|
|
116
|
+
2. **数据不一致**: 翻页时有新数据插入,导致重复或遗漏
|
|
117
|
+
3. **数据库负载**: 大 OFFSET 导致 CPU 使用率飙升
|
|
118
|
+
|
|
119
|
+
## Learning
|
|
120
|
+
|
|
121
|
+
- **游标分页更适合**: 使用 `WHERE id > last_id` 替代 OFFSET
|
|
122
|
+
- **性能对比**: 游标分页查询时间稳定在 50ms,与页数无关
|
|
123
|
+
- **决策**: 对于大数据集,始终用游标分页
|
|
124
|
+
|
|
125
|
+
## References
|
|
126
|
+
|
|
127
|
+
- [PostgreSQL OFFSET Performance](https://example.com/postgres-offset)
|
|
128
|
+
- [Cursor-based Pagination Best Practices](https://example.com/cursor-pagination)
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 何时记录尝试
|
|
134
|
+
|
|
135
|
+
| 情况 | 是否记录 |
|
|
136
|
+
|------|---------|
|
|
137
|
+
| 方案调研后决定不采用 | ✅ 记录 |
|
|
138
|
+
| 实现了但发现性能问题,放弃 | ✅ 记录 |
|
|
139
|
+
| 简单方案 A vs B 对比,选 A | ❌ 不记录(在 research.md Decisions 记录即可) |
|
|
140
|
+
| 重大架构决策放弃 | ✅ 记录 |
|
|
141
|
+
| 技术选型放弃 | ✅ 记录 |
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 与 ERROR_LOG.md 的区别
|
|
146
|
+
|
|
147
|
+
| | research/attempts/ | ERROR_LOG.md |
|
|
148
|
+
|--|-------------------|--------------|
|
|
149
|
+
| 阶段 | 研究阶段(Phase 0) | 执行阶段(flow-dev, flow-qa) |
|
|
150
|
+
| 内容 | 方案尝试与放弃 | 代码错误与修复 |
|
|
151
|
+
| 格式 | Markdown 文件 | 结构化错误日志 |
|
|
152
|
+
| 目的 | 避免重复研究 | 避免重复错误 |
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
**[PROTOCOL]**: 变更时更新此头部,然后检查 CLAUDE.md
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
---
|
|
2
|
+
req_id: "{REQ_ID}"
|
|
3
|
+
title: "{TITLE}"
|
|
4
|
+
created_at: "{ISO8601_TIMESTAMP}"
|
|
5
|
+
brainstorm_version: "1.0"
|
|
6
|
+
status: "draft"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# {REQ_ID} Brainstorm Record
|
|
10
|
+
|
|
11
|
+
> **[PROTOCOL]**: 后续所有开发必须与本文档保持一致。如有偏离,需更新本文档并说明原因。
|
|
12
|
+
|
|
13
|
+
## 原始需求(用户原话)
|
|
14
|
+
|
|
15
|
+
> {用户的原始描述,一字不改,保留所有细节}
|
|
16
|
+
|
|
17
|
+
## 核心问题定义
|
|
18
|
+
|
|
19
|
+
### 解决什么问题?
|
|
20
|
+
|
|
21
|
+
{一句话定义核心问题,例如:"用户无法在移动端完成支付"}
|
|
22
|
+
|
|
23
|
+
### 为谁解决?
|
|
24
|
+
|
|
25
|
+
{用户画像,例如:"日均活跃用户 10,000+,年龄 25-45,移动端为主"}
|
|
26
|
+
|
|
27
|
+
### 现状痛点
|
|
28
|
+
|
|
29
|
+
- {痛点1:具体描述,包含数据或用户反馈}
|
|
30
|
+
- {痛点2}
|
|
31
|
+
- {痛点3}
|
|
32
|
+
|
|
33
|
+
## 成功标准
|
|
34
|
+
|
|
35
|
+
### 如何判断需求完成?(验收标准)
|
|
36
|
+
|
|
37
|
+
- [ ] {可度量的标准1,例如:"支付成功率 ≥ 95%"}
|
|
38
|
+
- [ ] {可度量的标准2}
|
|
39
|
+
- [ ] {可度量的标准3}
|
|
40
|
+
|
|
41
|
+
### 如何判断需求成功?(业务指标)
|
|
42
|
+
|
|
43
|
+
- {业务指标1,例如:"订单转化率提升 10%"}
|
|
44
|
+
- {业务指标2}
|
|
45
|
+
|
|
46
|
+
## 约束条件
|
|
47
|
+
|
|
48
|
+
| 类型 | 约束 | 原因 |
|
|
49
|
+
|------|------|------|
|
|
50
|
+
| 技术 | {约束,例如:"必须兼容 iOS 12+"} | {原因} |
|
|
51
|
+
| 时间 | {约束,例如:"2 周内上线"} | {原因} |
|
|
52
|
+
| 资源 | {约束,例如:"1 前端 + 1 后端"} | {原因} |
|
|
53
|
+
| 安全 | {约束,例如:"敏感数据需加密"} | {原因} |
|
|
54
|
+
| 法规 | {约束,例如:"符合 GDPR"} | {原因} |
|
|
55
|
+
|
|
56
|
+
## 方案探索
|
|
57
|
+
|
|
58
|
+
### 方案 A: {名称} ⭐ 推荐
|
|
59
|
+
|
|
60
|
+
**描述**:
|
|
61
|
+
{方案概述,100-200 字}
|
|
62
|
+
|
|
63
|
+
**优势**:
|
|
64
|
+
- {优势1}
|
|
65
|
+
- {优势2}
|
|
66
|
+
|
|
67
|
+
**劣势**:
|
|
68
|
+
- {劣势1}
|
|
69
|
+
- {劣势2}
|
|
70
|
+
|
|
71
|
+
**适用场景**:
|
|
72
|
+
{何时选择这个方案}
|
|
73
|
+
|
|
74
|
+
**实现要点**:
|
|
75
|
+
1. {关键步骤1}
|
|
76
|
+
2. {关键步骤2}
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
### 方案 B: {名称}
|
|
81
|
+
|
|
82
|
+
**描述**:
|
|
83
|
+
{方案概述}
|
|
84
|
+
|
|
85
|
+
**优势**:
|
|
86
|
+
- {优势1}
|
|
87
|
+
|
|
88
|
+
**劣势**:
|
|
89
|
+
- {劣势1}
|
|
90
|
+
|
|
91
|
+
**适用场景**:
|
|
92
|
+
{何时选择这个方案}
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
### 方案 C: {名称}
|
|
97
|
+
|
|
98
|
+
**描述**:
|
|
99
|
+
{方案概述}
|
|
100
|
+
|
|
101
|
+
**优势**:
|
|
102
|
+
- {优势1}
|
|
103
|
+
|
|
104
|
+
**劣势**:
|
|
105
|
+
- {劣势1}
|
|
106
|
+
|
|
107
|
+
**适用场景**:
|
|
108
|
+
{何时选择这个方案}
|
|
109
|
+
|
|
110
|
+
## 最终决策
|
|
111
|
+
|
|
112
|
+
**选定方案**: 方案 {X}
|
|
113
|
+
|
|
114
|
+
**选择理由**:
|
|
115
|
+
{为什么选这个方案,而非其他方案}
|
|
116
|
+
|
|
117
|
+
**否决理由**:
|
|
118
|
+
- 方案 {Y}: {为什么不选}
|
|
119
|
+
- 方案 {Z}: {为什么不选}
|
|
120
|
+
|
|
121
|
+
## 关键决策记录
|
|
122
|
+
|
|
123
|
+
| 决策点 | 决策 | 理由 | 日期 |
|
|
124
|
+
|--------|------|------|------|
|
|
125
|
+
| {问题1} | {选择} | {为什么} | {YYYY-MM-DD} |
|
|
126
|
+
| {问题2} | {选择} | {为什么} | {YYYY-MM-DD} |
|
|
127
|
+
|
|
128
|
+
## 风险识别
|
|
129
|
+
|
|
130
|
+
| 风险 | 概率 | 影响 | 缓解策略 |
|
|
131
|
+
|------|------|------|----------|
|
|
132
|
+
| {风险1} | 高/中/低 | 高/中/低 | {应对措施} |
|
|
133
|
+
| {风险2} | 高/中/低 | 高/中/低 | {应对措施} |
|
|
134
|
+
|
|
135
|
+
## 变更历史
|
|
136
|
+
|
|
137
|
+
| 版本 | 日期 | 变更内容 | 变更原因 |
|
|
138
|
+
|------|------|----------|----------|
|
|
139
|
+
| 1.0 | {YYYY-MM-DD} | 初始版本 | 头脑风暴完成 |
|
|
140
|
+
|
|
141
|
+
---
|
|
142
|
+
|
|
143
|
+
**⚠️ 追溯声明**:
|
|
144
|
+
本文档是 {REQ_ID} 的「北极星」。后续 PRD、EPIC、TASKS、实现都必须与本文档保持一致。
|
|
145
|
+
如发现偏离,必须:
|
|
146
|
+
1. 确认偏离原因
|
|
147
|
+
2. 更新本文档
|
|
148
|
+
3. 记录变更历史
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# Error Log: ${REQ_ID}
|
|
2
|
+
|
|
3
|
+
> 本文件记录需求开发过程中遇到的所有错误及解决方案。
|
|
4
|
+
> **[PROTOCOL]**: 遇到错误时立即追加,不要等到最后。
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## 错误记录格式
|
|
9
|
+
|
|
10
|
+
每条错误记录遵循以下结构:
|
|
11
|
+
|
|
12
|
+
```markdown
|
|
13
|
+
## [TIMESTAMP] E###: TITLE
|
|
14
|
+
|
|
15
|
+
**Phase**: flow-dev / T### 或 flow-qa / 测试名
|
|
16
|
+
**Error Type**: Test Failure | Build Error | Runtime Error | Type Error | Lint Error
|
|
17
|
+
**Error Message**:
|
|
18
|
+
\`\`\`
|
|
19
|
+
完整错误信息
|
|
20
|
+
\`\`\`
|
|
21
|
+
|
|
22
|
+
**Root Cause**: 根因分析(解决后填写)
|
|
23
|
+
**Resolution**: 解决方案(解决后填写)
|
|
24
|
+
**Prevention**: 预防措施(可选,防止再犯)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
---
|
|
28
|
+
|
|
29
|
+
## 示例记录
|
|
30
|
+
|
|
31
|
+
## [2026-01-08T10:30:00] E001: Test Failure - Email Validation
|
|
32
|
+
|
|
33
|
+
**Phase**: flow-dev / T003
|
|
34
|
+
**Error Type**: Test Failure
|
|
35
|
+
**Error Message**:
|
|
36
|
+
```
|
|
37
|
+
FAIL src/auth/login.test.ts
|
|
38
|
+
× should validate email format
|
|
39
|
+
Expected: true
|
|
40
|
+
Received: false
|
|
41
|
+
|
|
42
|
+
at Object.<anonymous> (src/auth/login.test.ts:25:20)
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Root Cause**: 正则表达式未处理 + 号邮箱(如 user+tag@example.com)
|
|
46
|
+
**Resolution**: 更新正则为 `/^[^\s@]+@[^\s@]+\.[^\s@]+$/`
|
|
47
|
+
**Prevention**: 添加 + 号邮箱到测试用例,扩充边界测试
|
|
48
|
+
|
|
49
|
+
---
|
|
50
|
+
|
|
51
|
+
## [2026-01-08T11:15:00] E002: Build Error - Missing Import
|
|
52
|
+
|
|
53
|
+
**Phase**: flow-dev / T005
|
|
54
|
+
**Error Type**: Build Error
|
|
55
|
+
**Error Message**:
|
|
56
|
+
```
|
|
57
|
+
ERROR in src/components/UserProfile.tsx
|
|
58
|
+
Module not found: Can't resolve '@/utils/formatDate'
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Root Cause**: formatDate 函数移动到 @/utils/date 但未更新 import
|
|
62
|
+
**Resolution**: 更新 import 路径为 `@/utils/date`
|
|
63
|
+
**Prevention**: 使用 IDE 重构功能移动文件,自动更新引用
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 统计信息
|
|
68
|
+
|
|
69
|
+
| 指标 | 值 |
|
|
70
|
+
|------|-----|
|
|
71
|
+
| 总错误数 | 0 |
|
|
72
|
+
| 已解决 | 0 |
|
|
73
|
+
| 待解决 | 0 |
|
|
74
|
+
| 最常见类型 | - |
|
|
75
|
+
|
|
76
|
+
> 注:此统计在开发结束时手动更新
|
|
77
|
+
|
|
78
|
+
---
|
|
79
|
+
|
|
80
|
+
**[PROTOCOL]**: 变更时更新此头部,然后检查 CLAUDE.md
|
|
@@ -36,6 +36,9 @@ scripts:
|
|
|
36
36
|
```bash
|
|
37
37
|
# 1. 解析参数
|
|
38
38
|
REQ_ID|TITLE|PLAN_URLS → 验证 REQ_ID 格式: ^(REQ|BUG)-[0-9]+$
|
|
39
|
+
→ 若 TITLE 含中文/非ASCII,使用模型意译生成 BRANCH_TITLE_EN(英文语义翻译,禁止拼音/音译)
|
|
40
|
+
→ BRANCH_TITLE_EN 仅用于分支名,文档标题仍使用原始 TITLE
|
|
41
|
+
→ 若意译不确定或未生成 ASCII 结果,向用户确认英文分支标题
|
|
39
42
|
|
|
40
43
|
# 2. 前置条件检查
|
|
41
44
|
bash {SCRIPT:prereq} --json --paths-only
|
|
@@ -47,6 +50,19 @@ bash {SCRIPT:prereq} --json --paths-only
|
|
|
47
50
|
|
|
48
51
|
---
|
|
49
52
|
|
|
53
|
+
## Stage 1.2: Git Branch Creation
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# 创建功能分支
|
|
57
|
+
Requirements: feature/${REQ_ID}-${slug(BRANCH_TITLE_EN)}
|
|
58
|
+
Bug Fixes: bugfix/${BUG_ID}-${slug(BRANCH_TITLE_EN)}
|
|
59
|
+
|
|
60
|
+
# BRANCH_TITLE_EN = TITLE 的英文意译 (语义为准,非拼音,使用模型意译)
|
|
61
|
+
# slug() = lowercase, replace spaces/special chars with hyphens
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
50
66
|
## Stage 1.5: Context Loading (路线图与架构)
|
|
51
67
|
|
|
52
68
|
**目标**: 理解需求在项目中的位置
|
|
@@ -63,7 +79,9 @@ bash {SCRIPT:prereq} --json --paths-only
|
|
|
63
79
|
|
|
64
80
|
```bash
|
|
65
81
|
# 创建需求目录
|
|
66
|
-
bash {SCRIPT:create} "${REQ_ID}" --title "${TITLE}" --json
|
|
82
|
+
bash {SCRIPT:create} "${REQ_ID}" --title "${TITLE}" --branch-title "${BRANCH_TITLE_EN}" --json
|
|
83
|
+
|
|
84
|
+
→ 若未生成 BRANCH_TITLE_EN,则省略 --branch-title
|
|
67
85
|
|
|
68
86
|
# 生成文件
|
|
69
87
|
devflow/requirements/${REQ_ID}/
|
|
@@ -127,19 +145,9 @@ orchestration_status.json.phase0_complete = true
|
|
|
127
145
|
|
|
128
146
|
---
|
|
129
147
|
|
|
130
|
-
## Stage 3: Git Branch Creation
|
|
131
|
-
|
|
132
|
-
```bash
|
|
133
|
-
# 创建功能分支
|
|
134
|
-
Requirements: feature/${REQ_ID}-${slug(title)}
|
|
135
|
-
Bug Fixes: bugfix/${BUG_ID}-${slug(title)}
|
|
136
|
-
|
|
137
|
-
# slug() = lowercase, replace spaces/special chars with hyphens
|
|
138
|
-
```
|
|
139
148
|
|
|
140
|
-
---
|
|
141
149
|
|
|
142
|
-
## Stage
|
|
150
|
+
## Stage 3: README Generation
|
|
143
151
|
|
|
144
152
|
```bash
|
|
145
153
|
# 生成工作流指南
|
|
@@ -149,7 +157,7 @@ Bug Fixes: bugfix/${BUG_ID}-${slug(title)}
|
|
|
149
157
|
|
|
150
158
|
---
|
|
151
159
|
|
|
152
|
-
## Stage
|
|
160
|
+
## Stage 4: Exit Gate (5-Level Quality Check)
|
|
153
161
|
|
|
154
162
|
### Level 1: File Existence Check
|
|
155
163
|
```bash
|
|
@@ -204,7 +212,7 @@ devflow/requirements/${REQ_ID}/
|
|
|
204
212
|
```
|
|
205
213
|
|
|
206
214
|
**Git**:
|
|
207
|
-
- Branch: `feature/${REQ_ID}-${slug(
|
|
215
|
+
- Branch: `feature/${REQ_ID}-${slug(BRANCH_TITLE_EN)}`
|
|
208
216
|
- Status: orchestration_status.json.status = "initialized"
|
|
209
217
|
- Phase: orchestration_status.json.phase = "planning"
|
|
210
218
|
|