@haaaiawd/anws 2.1.1 → 2.2.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/package.json +1 -1
- package/templates/.agents/skills/code-reviewer/SKILL.md +327 -0
- package/templates/.agents/skills/system-designer/SKILL.md +6 -5
- package/templates/.agents/skills/system-designer/references/system-design-template.md +17 -5
- package/templates/.agents/skills/task-planner/SKILL.md +113 -79
- package/templates/.agents/skills/task-planner/references/TASK_TEMPLATE.md +82 -61
- package/templates/.agents/skills/task-reviewer/SKILL.md +59 -11
- package/templates/.agents/workflows/blueprint.md +107 -39
- package/templates/.agents/workflows/challenge.md +99 -45
- package/templates/.agents/workflows/change.md +171 -129
- package/templates/.agents/workflows/design-system.md +7 -5
- package/templates/.agents/workflows/forge.md +160 -91
- package/templates/.agents/workflows/genesis.md +13 -8
- package/templates/AGENTS.md +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@haaaiawd/anws",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Anws — A spec-driven workflow framework for AI-assisted development. Empowers prompt engineers to build production-ready software through structured PRD → Architecture → Task decomposition. Works with Claude Code, GitHub Copilot, Cursor, Windsurf, and any tool that reads AGENTS.md.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"anws",
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-reviewer
|
|
3
|
+
description: 对已实现代码进行纯静态忠实度审查,验证实现是否忠于 PRD、ADR、System Design 与 05_TASKS.md 的既有契约,并识别契约漂移、任务漂移、测试漂移与回流遗漏,作为 challenge 的实现侧证据层。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# 代码审查大师手册
|
|
7
|
+
|
|
8
|
+
> "设计会撒谎,任务会漂移,只有代码会留下真正的证据。"
|
|
9
|
+
|
|
10
|
+
你是 **代码审查大师**,负责对**已经存在的实现代码**做纯静态审查。
|
|
11
|
+
|
|
12
|
+
在 `/challenge` 工作流中,你的角色不是泛化 code review,也不是风格检查器;你要回答的是:
|
|
13
|
+
|
|
14
|
+
**实现是否忠于既有契约与任务承诺?**
|
|
15
|
+
|
|
16
|
+
你审查的主对象不是“代码写得漂不漂亮”,而是**实现是否忠于规范契约**。
|
|
17
|
+
|
|
18
|
+
**规范契约** 由以下来源共同组成:
|
|
19
|
+
- **业务契约**: `01_PRD.md` 中的业务目标、主流程、约束、验收语义
|
|
20
|
+
- **架构契约**: `02_ARCHITECTURE_OVERVIEW.md`、`03_ADR/`、`04_SYSTEM_DESIGN/` 中的系统边界、接口、状态与技术决策
|
|
21
|
+
- **任务契约**: `05_TASKS.md` 对实现承接、覆盖范围、验证方式作出的承诺
|
|
22
|
+
- **文档契约**: README / 使用说明 / 配置说明对评审者和使用者作出的操作承诺(如在当前审查范围内可获得)
|
|
23
|
+
- **运行契约**: 错误语义、审计边界、日志边界、幂等、重试、超时、降级与长期运行承诺
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## 任务目标
|
|
28
|
+
|
|
29
|
+
1. **加载代码与契约文档**:读取 `src/`、`05_TASKS.md`、`04_SYSTEM_DESIGN/`、`03_ADR/`、`01_PRD.md`、`02_ARCHITECTURE_OVERVIEW.md`
|
|
30
|
+
2. **建立规范来源集合与承诺模型**:先抽取业务目标、主流程、核心约束、错误与安全承诺,再映射到实现区域
|
|
31
|
+
3. **执行纯静态审查**:不运行项目,不跑测试,不连接外部系统
|
|
32
|
+
4. **优先发现失真**:重点识别契约实现偏移、任务承诺失真、验证作弊、回流遗漏、基础逻辑漏测
|
|
33
|
+
5. **生成报告**:输出可并入 `07_CHALLENGE_REPORT.md` 的高信号代码审查发现
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## 硬约束
|
|
38
|
+
|
|
39
|
+
- **纯静态审查**:不启动项目、不运行测试、不跑 Docker、不连接外部服务
|
|
40
|
+
- **不修改代码**:本 skill 只报告问题,不修复实现
|
|
41
|
+
- **不得虚构运行时成功**:除非有明确静态证据,否则不得声称某流程“运行正常”
|
|
42
|
+
- **Prompt / 契约优先**:所有判断都必须回到 PRD、System Design、ADR、Tasks 的承诺
|
|
43
|
+
- **证据可追溯**:每个关键结论都必须给出 `file:line`
|
|
44
|
+
- **安全优先级最高**:认证、鉴权、权限边界、数据隔离、调试端点保护必须显式检查
|
|
45
|
+
- **测试与日志是强制维度**:必须静态评估测试存在性、覆盖指向、日志分类与敏感信息泄漏风险
|
|
46
|
+
|
|
47
|
+
## 审查纪律
|
|
48
|
+
|
|
49
|
+
在输出任何强结论前,先自问:
|
|
50
|
+
- 这个结论是否有直接的 `file:line` 证据支持?
|
|
51
|
+
- 这是静态事实,还是我在暗示运行时行为?
|
|
52
|
+
- 我报告的是根因,还是只是在重复症状?
|
|
53
|
+
- 我是否是基于 Prompt / 契约在判断,而不是基于泛泛偏好?
|
|
54
|
+
- 如果我不确定,这里是否应该写成 `Cannot Confirm Statistically`?
|
|
55
|
+
|
|
56
|
+
你的优先级如下:
|
|
57
|
+
1. 找出真实的实质性缺陷
|
|
58
|
+
2. 保证结论有证据
|
|
59
|
+
3. 降低幻觉
|
|
60
|
+
4. 保持最终报告完整
|
|
61
|
+
5. 避免无意义重复
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## Step 1: 规范来源识别与承诺模型
|
|
66
|
+
|
|
67
|
+
在开始任何代码审查前,先建立最小承诺模型:
|
|
68
|
+
|
|
69
|
+
1. **识别规范来源**
|
|
70
|
+
- `01_PRD.md` → 业务契约
|
|
71
|
+
- `02_ARCHITECTURE_OVERVIEW.md` + `03_ADR/` + `04_SYSTEM_DESIGN/` → 架构契约
|
|
72
|
+
- `05_TASKS.md` → 任务契约
|
|
73
|
+
- README / 配置说明 / 验证路径 → 文档契约
|
|
74
|
+
|
|
75
|
+
2. **提炼最小承诺清单**
|
|
76
|
+
- 结果承诺:系统最终要达成什么业务结果
|
|
77
|
+
- 状态承诺:状态机、资源生命周期、越序约束
|
|
78
|
+
- 错误承诺:错误码、错误结构、默认失败路径
|
|
79
|
+
- 安全承诺:鉴权、授权、数据隔离、敏感信息边界
|
|
80
|
+
- 审计承诺:日志、留痕、观测边界
|
|
81
|
+
- 验证承诺:任务中声明的单测 / 回归 / 冒烟 / 手动验证责任
|
|
82
|
+
|
|
83
|
+
3. **建立代码映射**
|
|
84
|
+
- 哪些入口、模块、接口、测试、文档对应这些承诺
|
|
85
|
+
|
|
86
|
+
> [!IMPORTANT]
|
|
87
|
+
> 不允许跳过这一步直接扫代码。你要先知道系统承诺了什么,再判断代码是否失真。
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
## 审查对象与失真类型
|
|
92
|
+
|
|
93
|
+
优先按以下失真类型组织发现:
|
|
94
|
+
|
|
95
|
+
1. **Contract Drift**
|
|
96
|
+
- 设计定义了接口 / 错误语义 / 配置结构,代码是否真的照做
|
|
97
|
+
|
|
98
|
+
2. **Task Drift**
|
|
99
|
+
- `05_TASKS.md` 承诺的输出、边界处理、验证责任,代码是否兑现
|
|
100
|
+
|
|
101
|
+
3. **Test Drift**
|
|
102
|
+
- 任务声明了单测 / 回归 / 冒烟,测试是否真实覆盖对应契约,而不是凑数
|
|
103
|
+
|
|
104
|
+
4. **Missing Change Backflow**
|
|
105
|
+
- 代码里出现新公共契约、新错误语义、新配置结构,但没有走 `/change`
|
|
106
|
+
|
|
107
|
+
5. **Foundational Test Gaps**
|
|
108
|
+
- registry / parser / schema / diff / merge / planner / normalizer 等基础逻辑是否真的有单元测试承接
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
112
|
+
## 推荐扫描顺序
|
|
113
|
+
|
|
114
|
+
1. README / 使用说明 / 配置示例 / 包管理清单
|
|
115
|
+
2. 入口点与路由注册
|
|
116
|
+
3. 认证 / 会话 / Token / 中间件 / 权限守卫
|
|
117
|
+
4. 核心业务模块、服务、数据模型、持久层
|
|
118
|
+
5. 管理 / 内部 / 调试端点
|
|
119
|
+
6. 测试文件与测试配置
|
|
120
|
+
7. 如适用,再看前端 UI 结构与视觉一致性
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
## 重点审查维度
|
|
125
|
+
|
|
126
|
+
### 1. 文档与静态可验证性
|
|
127
|
+
|
|
128
|
+
检查:
|
|
129
|
+
- 是否提供了清晰的启动 / 运行 / 测试 / 配置说明
|
|
130
|
+
- 文档中的入口、配置和项目结构在静态上是否基本一致
|
|
131
|
+
- 交付物是否提供了足够静态证据,使人工评审者无需先改核心代码即可尝试验证
|
|
132
|
+
|
|
133
|
+
若静态证据不足,不等于运行失败;应写成 `Cannot Confirm Statistically`。
|
|
134
|
+
|
|
135
|
+
### 2. Prompt / 契约到代码映射
|
|
136
|
+
|
|
137
|
+
先提炼:
|
|
138
|
+
- 核心业务目标
|
|
139
|
+
- 主流程
|
|
140
|
+
- 明确需求
|
|
141
|
+
- 重要隐含约束
|
|
142
|
+
|
|
143
|
+
然后映射到:
|
|
144
|
+
- 代码入口
|
|
145
|
+
- 核心模块
|
|
146
|
+
- 接口定义
|
|
147
|
+
- 数据模型
|
|
148
|
+
- 测试
|
|
149
|
+
- 文档
|
|
150
|
+
|
|
151
|
+
若代码大量偏离这些内容,应优先判为 **Task Drift** 或 **Contract Drift**。
|
|
152
|
+
|
|
153
|
+
### 3. 工程与架构质量
|
|
154
|
+
|
|
155
|
+
检查:
|
|
156
|
+
- 项目结构与模块划分是否与问题规模相匹配
|
|
157
|
+
- 是否具备基本可维护性和扩展空间,而不是临时堆砌
|
|
158
|
+
- 是否存在明显高度耦合、职责混乱或不合理大文件
|
|
159
|
+
|
|
160
|
+
### 4. 安全审查(强制)
|
|
161
|
+
|
|
162
|
+
必须分别评估:
|
|
163
|
+
- 认证入口
|
|
164
|
+
- 路由级鉴权
|
|
165
|
+
- 对象级鉴权
|
|
166
|
+
- 函数级权限控制
|
|
167
|
+
- 租户 / 用户数据隔离
|
|
168
|
+
- 管理 / 内部 / 调试端点保护
|
|
169
|
+
|
|
170
|
+
若证据不足,不得夸大为已证实缺陷;应标记为:
|
|
171
|
+
- `无法通过静态审查确认`
|
|
172
|
+
- 或 `疑似风险`
|
|
173
|
+
|
|
174
|
+
### 5. 测试与日志审查(强制)
|
|
175
|
+
|
|
176
|
+
必须评估:
|
|
177
|
+
- 是否存在单元测试与 API / 集成测试
|
|
178
|
+
- 静态上覆盖了什么
|
|
179
|
+
- 是否覆盖核心流程与重要失败路径
|
|
180
|
+
- 日志分类是否清晰
|
|
181
|
+
- 日志或响应中是否存在敏感信息泄漏风险
|
|
182
|
+
|
|
183
|
+
### 6. Test Coverage Assessment(强制)
|
|
184
|
+
|
|
185
|
+
重点围绕高风险与核心需求做覆盖映射:
|
|
186
|
+
- 核心 happy path
|
|
187
|
+
- 输入校验失败
|
|
188
|
+
- 未认证 401
|
|
189
|
+
- 未授权 403
|
|
190
|
+
- 404 not found
|
|
191
|
+
- 对象级鉴权
|
|
192
|
+
- 租户 / 用户隔离
|
|
193
|
+
- 空数据 / 极值 / 时间字段 / 并发 / 重复请求 / 回滚(如适用)
|
|
194
|
+
- 敏感日志泄漏
|
|
195
|
+
|
|
196
|
+
不要求臃肿全量矩阵,但必须说明哪些高风险点:
|
|
197
|
+
- `sufficient`
|
|
198
|
+
- `basically covered`
|
|
199
|
+
- `insufficient`
|
|
200
|
+
- `missing`
|
|
201
|
+
- `not applicable`
|
|
202
|
+
- `cannot confirm`
|
|
203
|
+
|
|
204
|
+
---
|
|
205
|
+
|
|
206
|
+
## 六大章节组织规则
|
|
207
|
+
|
|
208
|
+
虽然你的实际扫描顺序可以按风险优先进行,但最终报告必须按以下顺序组织:
|
|
209
|
+
|
|
210
|
+
1. **文档与静态可验证性**
|
|
211
|
+
2. **Prompt / 契约贴合度**
|
|
212
|
+
3. **工程与架构质量**
|
|
213
|
+
4. **安全审查**
|
|
214
|
+
5. **测试与日志审查**
|
|
215
|
+
6. **Test Coverage Assessment**
|
|
216
|
+
|
|
217
|
+
对每个章节都要给出:
|
|
218
|
+
- 结论:Pass / Partial Pass / Fail / 不适用 / Cannot Confirm Statistically
|
|
219
|
+
- 理由:与 Prompt / 契约和代码绑定的简明说明
|
|
220
|
+
- 证据:`file:line`
|
|
221
|
+
- 如静态证据不足,可补一句人工验证建议
|
|
222
|
+
|
|
223
|
+
---
|
|
224
|
+
|
|
225
|
+
## 严重度分级
|
|
226
|
+
|
|
227
|
+
| 等级 | 判定标准 | 所需行动 |
|
|
228
|
+
|:----:|---------|---------|
|
|
229
|
+
| **Critical** 🔴 | 根本性矛盾或不可能交付。不解决无法继续。 | P0 — 必须在 forge / 验收前修复 |
|
|
230
|
+
| **High** 🟠 | 大概率导致严重返工、契约失真或安全/测试失守。 | P1 — 在继续交付前修复 |
|
|
231
|
+
| **Medium** 🟡 | 有明显质量隐患,但存在可控变通空间。 | P2 — 尽快修复 |
|
|
232
|
+
| **Low** 🟢 | 轻微不一致或可后续收敛项。 | P3 — 跟踪改进 |
|
|
233
|
+
|
|
234
|
+
---
|
|
235
|
+
|
|
236
|
+
## 输出格式
|
|
237
|
+
|
|
238
|
+
按以下结构生成适合纳入 `07_CHALLENGE_REPORT.md` 的代码审查部分:
|
|
239
|
+
|
|
240
|
+
```markdown
|
|
241
|
+
## 🧪 代码审查发现
|
|
242
|
+
|
|
243
|
+
### 总结结论
|
|
244
|
+
- Overall conclusion: Pass / Partial Pass / Fail / Cannot Confirm Statistically
|
|
245
|
+
|
|
246
|
+
### 审查范围与静态验证边界
|
|
247
|
+
- 审查了什么
|
|
248
|
+
- 没有审查什么
|
|
249
|
+
- 有意未执行什么
|
|
250
|
+
- 哪些结论需要人工验证
|
|
251
|
+
|
|
252
|
+
### 规范来源与仓库映射摘要
|
|
253
|
+
- 核心业务目标 / 主流程 / 主要约束
|
|
254
|
+
- 提炼出的关键承诺
|
|
255
|
+
- 映射到的主要实现区域
|
|
256
|
+
|
|
257
|
+
### 分章节审查结果
|
|
258
|
+
- 文档与静态可验证性
|
|
259
|
+
- Prompt / 契约贴合度
|
|
260
|
+
- 工程与架构质量
|
|
261
|
+
- 安全审查
|
|
262
|
+
- 测试与日志审查
|
|
263
|
+
- Test Coverage Assessment
|
|
264
|
+
|
|
265
|
+
> 每个章节内部都应明确写出:结论 / 理由 / 证据 /(如需要)人工验证建议。
|
|
266
|
+
|
|
267
|
+
### 分类发现摘要
|
|
268
|
+
|
|
269
|
+
| 类型 | 发现数 | Critical | High | Medium | Low |
|
|
270
|
+
|------|:------:|:--------:|:----:|:------:|:---:|
|
|
271
|
+
| Contract Drift | — | — | — | — | — |
|
|
272
|
+
| Task Drift | — | — | — | — | — |
|
|
273
|
+
| Test Drift | — | — | — | — | — |
|
|
274
|
+
| Missing Change Backflow | — | — | — | — | — |
|
|
275
|
+
| Foundational Test Gaps | — | — | — | — | — |
|
|
276
|
+
|
|
277
|
+
### Issues / Suggestions
|
|
278
|
+
|
|
279
|
+
#### CR-01 [标题]
|
|
280
|
+
- **Severity**: High
|
|
281
|
+
- **Conclusion**: [一句话结论]
|
|
282
|
+
- **Evidence**: `src/...:12`, `.anws/v{N}/05_TASKS.md:88`
|
|
283
|
+
- **Impact**: [为什么这是实质问题]
|
|
284
|
+
- **Minimum actionable fix**: [最小修复建议]
|
|
285
|
+
|
|
286
|
+
### 安全审查摘要
|
|
287
|
+
|
|
288
|
+
| 项目 | 结论 | 理由 | 证据 |
|
|
289
|
+
|------|------|------|------|
|
|
290
|
+
| 认证入口 | Pass / Partial / Fail / Cannot Confirm | ... | `file:line` |
|
|
291
|
+
| 路由级鉴权 | ... | ... | ... |
|
|
292
|
+
| 对象级鉴权 | ... | ... | ... |
|
|
293
|
+
| 函数级权限控制 | ... | ... | ... |
|
|
294
|
+
| 租户 / 数据隔离 | ... | ... | ... |
|
|
295
|
+
| 管理 / 调试端点保护 | ... | ... | ... |
|
|
296
|
+
|
|
297
|
+
### 测试与日志审查
|
|
298
|
+
- 单元测试
|
|
299
|
+
- API / 集成测试
|
|
300
|
+
- 日志分类 / 可观测性
|
|
301
|
+
- 日志 / 响应中的敏感信息泄漏风险
|
|
302
|
+
|
|
303
|
+
### Test Coverage Assessment
|
|
304
|
+
|
|
305
|
+
| Requirement / Risk Point | 对应测试 | 关键断言 / Fixture / Mock | 覆盖结论 | Gap | Minimum Test Addition |
|
|
306
|
+
|--------------------------|---------|---------------------------|---------|-----|-----------------------|
|
|
307
|
+
| 未认证 401 | `test/auth.test.js:20` | `expect(status).toBe(401)` | sufficient | — | — |
|
|
308
|
+
| 对象级鉴权 | — | — | missing | 缺对象所有权断言 | 增加非 owner 访问测试 |
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
> [!NOTE]
|
|
312
|
+
> **输出风格要求**:
|
|
313
|
+
> - 保持与 `design-reviewer`、`task-reviewer` 同样的“高信号摘要 + 核心发现”风格
|
|
314
|
+
> - 重点写根因级问题,不要把报告膨胀成低价值逐项 checklist
|
|
315
|
+
> - 如某一章节不适用,写“不适用”;如静态证据不足,写 `Cannot Confirm Statistically`
|
|
316
|
+
|
|
317
|
+
---
|
|
318
|
+
|
|
319
|
+
## 审查质量清单
|
|
320
|
+
|
|
321
|
+
交付前确认:
|
|
322
|
+
- [ ] 每个强结论都有 `file:line` 证据
|
|
323
|
+
- [ ] 没有把静态推断伪装成运行时事实
|
|
324
|
+
- [ ] 发现聚焦根因,而不是重复表层症状
|
|
325
|
+
- [ ] 判断以 Prompt / 契约为依据,而不是泛化个人偏好
|
|
326
|
+
- [ ] 安全、测试、日志三项已显式审查
|
|
327
|
+
- [ ] 对无法确认的项使用了 `Cannot Confirm Statistically` 或等价说明
|
|
@@ -146,7 +146,7 @@ description: 为单个系统设计详细的技术文档。负责架构图、接
|
|
|
146
146
|
8. **Trade-offs & Alternatives** ⭐ - 为什么选A不选B
|
|
147
147
|
9. **安全性考虑 (Security)** - 认证、加密、风险缓解
|
|
148
148
|
10. **性能考虑 (Performance)** - 目标、优化策略、监控
|
|
149
|
-
11. **测试策略 (Testing)** - 单元、集成、E2E
|
|
149
|
+
11. **测试策略 (Testing)** - 单元、集成、E2E、契约验证责任矩阵
|
|
150
150
|
|
|
151
151
|
### 可选章节 (Optional)
|
|
152
152
|
12. **部署与运维 (Deployment)** - 部署流程、监控告警(小项目可简化)
|
|
@@ -383,10 +383,11 @@ flowchart TD
|
|
|
383
383
|
|
|
384
384
|
在完成系统设计文档后,使用此清单自检:
|
|
385
385
|
|
|
386
|
-
### 结构完整性
|
|
387
|
-
- [ ] 包含所有11个必需章节
|
|
388
|
-
- [ ] 架构图存在且清晰(Mermaid)
|
|
389
|
-
- [ ] 数据流图存在(如适用)
|
|
386
|
+
### 结构完整性
|
|
387
|
+
- [ ] 包含所有11个必需章节
|
|
388
|
+
- [ ] 架构图存在且清晰(Mermaid)
|
|
389
|
+
- [ ] 数据流图存在(如适用)
|
|
390
|
+
- [ ] 如系统涉及公共契约,11.5 Contract Verification Matrix 已填写
|
|
390
391
|
- [ ] Trade-offs章节至少讨论2个重要决策
|
|
391
392
|
|
|
392
393
|
### 内容质量
|
|
@@ -440,11 +440,23 @@ classDiagram
|
|
|
440
440
|
- **Test Scenarios**:
|
|
441
441
|
- [ ] 用户登录完整流程(前端 → 后端 → 数据库)
|
|
442
442
|
|
|
443
|
-
### 11.4 Performance Testing (性能测试)
|
|
444
|
-
- **Tool**: Locust / k6
|
|
445
|
-
- **Scenarios**:
|
|
446
|
-
- [ ] 1000 并发用户登录
|
|
447
|
-
- [ ] Target: p95 < 200ms
|
|
443
|
+
### 11.4 Performance Testing (性能测试)
|
|
444
|
+
- **Tool**: Locust / k6
|
|
445
|
+
- **Scenarios**:
|
|
446
|
+
- [ ] 1000 并发用户登录
|
|
447
|
+
- [ ] Target: p95 < 200ms
|
|
448
|
+
|
|
449
|
+
### 11.5 Contract Verification Matrix (契约-验证责任矩阵)
|
|
450
|
+
|
|
451
|
+
| 契约 | 风险级别 | 正常态验证 | 失败态验证 | 回归责任 |
|
|
452
|
+
|------|---------|-----------|-----------|---------|
|
|
453
|
+
| `POST /auth/login` | 关键路径 | 集成测试 | 非法凭证返回 401 | 认证主链路最小回归 |
|
|
454
|
+
| JWT 生成规则 | 基础规则层 | 单元测试 | 非法输入/过期边界 | token 相关回归 |
|
|
455
|
+
|
|
456
|
+
> **要求**:
|
|
457
|
+
> - 每个关键公共契约都应有一条验证责任
|
|
458
|
+
> - 失败态 / 边界态不应省略
|
|
459
|
+
> - Blueprint 和 Challenge 应优先复用本矩阵,而不是完全依赖后续推断
|
|
448
460
|
|
|
449
461
|
---
|
|
450
462
|
|
|
@@ -28,19 +28,21 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
28
28
|
## ⚠️ 核心原则
|
|
29
29
|
|
|
30
30
|
> [!IMPORTANT]
|
|
31
|
-
> **任务规划的四大原则**:
|
|
32
|
-
>
|
|
33
|
-
> 1. **WBS层次化** - Work Breakdown Structure三级组织
|
|
34
|
-
> 2. **原子化** - 每个Task
|
|
35
|
-
> 3. **可验证** -
|
|
36
|
-
> 4. **可追溯** - 每个Task关联PRD需求 [REQ-XXX]
|
|
37
|
-
|
|
38
|
-
> [!IMPORTANT]
|
|
39
|
-
> **测试规划附加原则**:
|
|
40
|
-
> - 优先选择**最轻但足够**的验证类型
|
|
41
|
-
> - 如 Workflow / ADR 已声明测试策略,必须优先遵循,不得自行改重
|
|
42
|
-
> - **冒烟测试默认仅用于 `INT-S{N}` 或极少数里程碑任务**
|
|
43
|
-
> - **回归测试仅在已有关键能力可能被破坏时生成**,不是所有任务的默认要求
|
|
31
|
+
> **任务规划的四大原则**:
|
|
32
|
+
>
|
|
33
|
+
> 1. **WBS层次化** - Work Breakdown Structure三级组织
|
|
34
|
+
> 2. **原子化** - 每个 Task 优先控制在 2h-2d
|
|
35
|
+
> 3. **可验证** - 默认使用 Given / When / Then;仅纯技术性基础任务允许清晰 Done When
|
|
36
|
+
> 4. **可追溯** - 每个Task关联PRD需求 [REQ-XXX]
|
|
37
|
+
|
|
38
|
+
> [!IMPORTANT]
|
|
39
|
+
> **测试规划附加原则**:
|
|
40
|
+
> - 优先选择**最轻但足够**的验证类型
|
|
41
|
+
> - 如 Workflow / ADR 已声明测试策略,必须优先遵循,不得自行改重
|
|
42
|
+
> - **冒烟测试默认仅用于 `INT-S{N}` 或极少数里程碑任务**
|
|
43
|
+
> - **回归测试仅在已有关键能力可能被破坏时生成**,不是所有任务的默认要求
|
|
44
|
+
> - **基础层、共享层、纯逻辑层默认优先单元测试**,主要分支、边界情况与错误路径应尽量覆盖
|
|
45
|
+
> - **公共契约必须有承接**:至少一个实现任务 + 至少一个验证承接点
|
|
44
46
|
|
|
45
47
|
❌ **错误做法**:
|
|
46
48
|
- 平铺任务列表(无层次)
|
|
@@ -49,11 +51,11 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
49
51
|
- 缺少验收标准
|
|
50
52
|
- 忽略依赖关系
|
|
51
53
|
|
|
52
|
-
✅ **正确做法**:
|
|
53
|
-
- **三级层次**: System → Phase → Task
|
|
54
|
-
- **合理粒度**: 每个Task
|
|
55
|
-
- **清晰验收**:
|
|
56
|
-
- **完整元数据**: ID, [REQ-XXX], 描述, 输入, 输出, 验收, 估时, 依赖, 优先级
|
|
54
|
+
✅ **正确做法**:
|
|
55
|
+
- **三级层次**: System → Phase → Task
|
|
56
|
+
- **合理粒度**: 每个 Task 2h-2d
|
|
57
|
+
- **清晰验收**: 默认 Given / When / Then,必要时使用清晰 Done When
|
|
58
|
+
- **完整元数据**: ID, [REQ-XXX], 描述, 输入, 输出, 验收, 估时, 依赖, 优先级
|
|
57
59
|
|
|
58
60
|
---
|
|
59
61
|
|
|
@@ -113,38 +115,41 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
113
115
|
> - ✅ 好: `04_SYSTEM_DESIGN/auth.md` §JWT 签发
|
|
114
116
|
> - ❌ 差: "JWT 相关设计"(无具体文档引用)
|
|
115
117
|
|
|
116
|
-
**Task结构**:
|
|
117
|
-
```markdown
|
|
118
|
-
- [ ] **T{System}.{Phase}.{Seq}** [REQ-XXX]: 任务描述
|
|
119
|
-
- **描述**: 简洁说明"做什么"(不是"怎么做")
|
|
120
|
-
- **输入**: 设计文档引用 + 前置任务产出(必须包含至少一个文档引用)
|
|
121
|
-
- **输出**: 产出什么交付物
|
|
122
|
-
-
|
|
123
|
-
-
|
|
124
|
-
|
|
125
|
-
- [
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
-
|
|
130
|
-
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
-
|
|
147
|
-
|
|
118
|
+
**Task结构**:
|
|
119
|
+
```markdown
|
|
120
|
+
- [ ] **T{System}.{Phase}.{Seq}** [REQ-XXX]: 任务描述
|
|
121
|
+
- **描述**: 简洁说明"做什么"(不是"怎么做")
|
|
122
|
+
- **输入**: 设计文档引用 + 前置任务产出(必须包含至少一个文档引用)
|
|
123
|
+
- **输出**: 产出什么交付物
|
|
124
|
+
- **契约承接**: 本任务实现或验证的公共契约;如无则写“无”
|
|
125
|
+
- **📎 参考**: ADR-XXX 或 System Design 章节(如有)
|
|
126
|
+
- **验收标准**:
|
|
127
|
+
- Given [前置条件]
|
|
128
|
+
- When [执行动作]
|
|
129
|
+
- Then [预期结果]
|
|
130
|
+
- (仅纯技术性基础任务允许使用清晰 Done When 列表)
|
|
131
|
+
- **验证类型**: 单元测试 | 集成测试 | E2E测试 | 冒烟测试 | 回归测试 | 手动验证 | 编译检查 | Lint检查
|
|
132
|
+
- **验证说明**: 如何确认任务完成 (检查什么,如何确认)
|
|
133
|
+
- **估时**: 预估工时(如: 2h, 6h, 1d, 2d)
|
|
134
|
+
- **依赖**: T{X}.{Y}.{Z} (依赖的Task ID)
|
|
135
|
+
- **优先级**: P0 | P1 | P2
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
**示例**:
|
|
139
|
+
```markdown
|
|
140
|
+
- [ ] **T1.1.1** [基础]: 设置 Vite + React 项目
|
|
141
|
+
- **描述**: 初始化前端项目,配置Vite、React、TypeScript
|
|
142
|
+
- **输入**: PRD (React技术栈要求)
|
|
143
|
+
- **输出**: 可运行的Hello World应用 (`src/App.tsx`, `vite.config.ts`)
|
|
144
|
+
- **验收标准**:
|
|
145
|
+
- [ ] `npm run dev` 正常启动
|
|
146
|
+
- [ ] 页面显示"Hello World"
|
|
147
|
+
- [ ] TypeScript类型检查通过
|
|
148
|
+
- **验证类型**: 编译检查
|
|
149
|
+
- **估时**: 2h
|
|
150
|
+
- **依赖**: 无
|
|
151
|
+
- **优先级**: P0
|
|
152
|
+
```
|
|
148
153
|
|
|
149
154
|
### 验证类型选择逻辑
|
|
150
155
|
|
|
@@ -158,11 +163,39 @@ description: 使用WBS方法将系统设计文档分解为层次化任务。支
|
|
|
158
163
|
5. **修改可能影响已完成关键能力** → 回归测试
|
|
159
164
|
6. **配置、脚手架、基础设施** → 编译检查 / Lint检查 / 手动验证
|
|
160
165
|
|
|
161
|
-
**选择细则**:
|
|
162
|
-
- 不要因为任务“看起来重要”就默认选择 E2E测试
|
|
163
|
-
- 如果集成测试足以证明任务完成,就不要升级为 E2E测试
|
|
164
|
-
- 如果只是里程碑 readiness 检查,优先使用少量冒烟测试,而不是新建大量 E2E任务
|
|
165
|
-
- 如果只是验证旧能力未被破坏,优先复用已有测试集合作为回归测试
|
|
166
|
+
**选择细则**:
|
|
167
|
+
- 不要因为任务“看起来重要”就默认选择 E2E测试
|
|
168
|
+
- 如果集成测试足以证明任务完成,就不要升级为 E2E测试
|
|
169
|
+
- 如果只是里程碑 readiness 检查,优先使用少量冒烟测试,而不是新建大量 E2E任务
|
|
170
|
+
- 如果只是验证旧能力未被破坏,优先复用已有测试集合作为回归测试
|
|
171
|
+
|
|
172
|
+
### 契约风险覆盖规则
|
|
173
|
+
|
|
174
|
+
> [!IMPORTANT]
|
|
175
|
+
> **若任务产出包含新的公共契约或会修改现有公共契约,必须为其分配明确验证承接。**
|
|
176
|
+
|
|
177
|
+
公共契约至少包括:
|
|
178
|
+
- 操作契约
|
|
179
|
+
- 跨系统接口
|
|
180
|
+
- HTTP API
|
|
181
|
+
- CLI 命令 / 参数语义
|
|
182
|
+
- 配置结构 / 文件格式 / 状态格式
|
|
183
|
+
- 错误语义 / 返回结构
|
|
184
|
+
- 持久化结构
|
|
185
|
+
|
|
186
|
+
规则:
|
|
187
|
+
- 每个公共契约至少要有一个实现任务承接
|
|
188
|
+
- 每个高风险公共契约至少要有一个验证承接点
|
|
189
|
+
- 不得仅以“实现任务已有代码变更”视为契约闭合
|
|
190
|
+
- 若契约属于基础规则层或低依赖纯逻辑,应优先补充单元测试,而不是直接升级为 E2E
|
|
191
|
+
|
|
192
|
+
### 基础单测优先原则
|
|
193
|
+
|
|
194
|
+
> [!IMPORTANT]
|
|
195
|
+
> **对 registry、manifest、parser、planner、schema、diff、merge、normalizer、selector 等基础逻辑,优先生成单元测试任务。**
|
|
196
|
+
|
|
197
|
+
- 如果这些逻辑是多个上层流程共享的基础设施,其单元测试默认视为必选,不应依赖高层流程测试间接覆盖
|
|
198
|
+
- 如果一个 Sprint 新增了多个基础逻辑点,优先在同 Sprint 或紧邻 Sprint 内生成对应单测任务,不要全部拖到收尾期
|
|
166
199
|
|
|
167
200
|
### Sprint 与冒烟测试绑定规则
|
|
168
201
|
|
|
@@ -256,16 +289,16 @@ T1.2.1 (前端UI设计) → T2.2.1 (后端API实现)
|
|
|
256
289
|
|
|
257
290
|
## 📊 任务拆分原则
|
|
258
291
|
|
|
259
|
-
### 原则1:
|
|
260
|
-
**规则**: 单个Task
|
|
292
|
+
### 原则1: 2h-2d 规则
|
|
293
|
+
**规则**: 单个 Task 应优先落在 2 小时到 2 天内;超过 2 天应继续拆分。
|
|
261
294
|
|
|
262
295
|
**为什么?**
|
|
263
296
|
- 太大: 难以估时、风险不可控
|
|
264
297
|
- 太小: 管理成本高、碎片化
|
|
265
298
|
|
|
266
|
-
**检查**:
|
|
267
|
-
- Task估时 > 2
|
|
268
|
-
- Task估时 < 2小时 → 考虑合并
|
|
299
|
+
**检查**:
|
|
300
|
+
- Task估时 > 2天 → 继续拆分
|
|
301
|
+
- Task估时 < 2小时 → 考虑合并
|
|
269
302
|
|
|
270
303
|
---
|
|
271
304
|
|
|
@@ -287,12 +320,13 @@ T1.2.1 (前端UI设计) → T2.2.1 (后端API实现)
|
|
|
287
320
|
|
|
288
321
|
---
|
|
289
322
|
|
|
290
|
-
### 原则4: 可验证性
|
|
291
|
-
**规则**: 每个Task
|
|
292
|
-
|
|
293
|
-
**示例**:
|
|
294
|
-
- ✅ 好: "
|
|
295
|
-
-
|
|
323
|
+
### 原则4: 可验证性
|
|
324
|
+
**规则**: 每个 Task 必须有明确、可执行、可观察的验收标准;默认使用 Given / When / Then,纯技术性基础任务可使用清晰 Done When。
|
|
325
|
+
|
|
326
|
+
**示例**:
|
|
327
|
+
- ✅ 好: "Given 合法输入, When 调用接口, Then 返回 200 且结构符合契约"
|
|
328
|
+
- ✅ 好: "[ ] 单元测试通过(仅用于纯技术性基础任务)"
|
|
329
|
+
- ❌ 差: "Done When: 差不多完成了"
|
|
296
330
|
|
|
297
331
|
---
|
|
298
332
|
|
|
@@ -314,14 +348,14 @@ T1.2.1 (前端UI设计) → T2.2.1 (后端API实现)
|
|
|
314
348
|
|
|
315
349
|
---
|
|
316
350
|
|
|
317
|
-
### 守则2: 验收标准具体化
|
|
318
|
-
**规则**: Done When
|
|
351
|
+
### 守则2: 验收标准具体化
|
|
352
|
+
**规则**: 默认使用 Given / When / Then;仅当纯技术性基础任务不适合 GWT 时,才退回清晰的 Done When。
|
|
319
353
|
|
|
320
|
-
**好的验收标准**:
|
|
321
|
-
-
|
|
322
|
-
-
|
|
323
|
-
- [ ]
|
|
324
|
-
- [ ]
|
|
354
|
+
**好的验收标准**:
|
|
355
|
+
- Given 输入合法, When 调用接口, Then 返回 200 且结构符合契约
|
|
356
|
+
- Given 非法凭证, When 请求登录, Then 返回 401 且错误语义一致
|
|
357
|
+
- [ ] 单元测试通过(仅用于纯技术性基础任务)
|
|
358
|
+
- [ ] Lint无错误(仅用于纯技术性基础任务)
|
|
325
359
|
|
|
326
360
|
**差的验收标准**:
|
|
327
361
|
- [ ] 功能正常(太模糊)
|
|
@@ -403,7 +437,7 @@ graph TD
|
|
|
403
437
|
|
|
404
438
|
| 检查项 | 标准 | 如何修正 |
|
|
405
439
|
|--------|------|---------|
|
|
406
|
-
| 估时 |
|
|
440
|
+
| 估时 | 2h-2d | 过大→拆分, 过小→合并 |
|
|
407
441
|
| 交付物 | 单一明确 | 多个→拆分为多个Task |
|
|
408
442
|
| 验收标准 | 3-5条具体标准 | 模糊→细化为可测试条件 |
|
|
409
443
|
| 依赖 | < 5个依赖 | 过多→重新组织Phase |
|
|
@@ -526,11 +560,11 @@ Phase 3: 回归测试 (Regression)
|
|
|
526
560
|
- [ ] 每个System有清晰的Phase划分
|
|
527
561
|
- [ ] 每个Task有完整的元数据
|
|
528
562
|
|
|
529
|
-
### 任务质量
|
|
530
|
-
- [ ] 每个Task估时
|
|
531
|
-
- [ ] 每个Task有3-5条验收标准
|
|
532
|
-
- [ ] 每个Task关联PRD需求 [REQ-XXX]
|
|
533
|
-
- [ ] 每个Task描述清晰("做什么")
|
|
563
|
+
### 任务质量
|
|
564
|
+
- [ ] 每个Task估时 2h-2d
|
|
565
|
+
- [ ] 每个Task有3-5条验收标准
|
|
566
|
+
- [ ] 每个Task关联PRD需求 [REQ-XXX]
|
|
567
|
+
- [ ] 每个Task描述清晰("做什么")
|
|
534
568
|
|
|
535
569
|
### 依赖关系
|
|
536
570
|
- [ ] 提供Mermaid依赖图
|