flower-trellis 0.1.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 +113 -0
- package/bin/flower-trellis.js +4 -0
- package/enhancements/0.5/.agents/skills/trellis-analyze-task/SKILL.md +142 -0
- package/enhancements/0.5/.agents/skills/trellis-check-all/SKILL.md +324 -0
- package/enhancements/0.5/.agents/skills/trellis-create-command/SKILL.md +258 -0
- package/enhancements/0.5/.agents/skills/trellis-create-prd/SKILL.md +197 -0
- package/enhancements/0.5/.agents/skills/trellis-draw-uml/SKILL.md +148 -0
- package/enhancements/0.5/.agents/skills/trellis-migrate-skill/SKILL.md +216 -0
- package/enhancements/0.5/.agents/skills/trellis-plan-version/SKILL.md +140 -0
- package/enhancements/0.5/.agents/skills/trellis-push/SKILL.md +240 -0
- package/enhancements/0.5/.agents/skills/trellis-re-implement/SKILL.md +166 -0
- package/enhancements/0.5/.agents/skills/trellis-route/SKILL.md +159 -0
- package/enhancements/0.5/.agents/skills/trellis-run-full-chain/SKILL.md +402 -0
- package/enhancements/0.5/.agents/skills/trellis-sync-prd/SKILL.md +150 -0
- package/enhancements/0.5/.agents/skills/trellis-verify-prd/SKILL.md +217 -0
- package/enhancements/0.5/.claude/skills/trellis-analyze-task/SKILL.md +142 -0
- package/enhancements/0.5/.claude/skills/trellis-check-all/SKILL.md +324 -0
- package/enhancements/0.5/.claude/skills/trellis-create-command/SKILL.md +258 -0
- package/enhancements/0.5/.claude/skills/trellis-create-prd/SKILL.md +197 -0
- package/enhancements/0.5/.claude/skills/trellis-draw-uml/SKILL.md +148 -0
- package/enhancements/0.5/.claude/skills/trellis-migrate-skill/SKILL.md +216 -0
- package/enhancements/0.5/.claude/skills/trellis-plan-version/SKILL.md +140 -0
- package/enhancements/0.5/.claude/skills/trellis-push/SKILL.md +240 -0
- package/enhancements/0.5/.claude/skills/trellis-re-implement/SKILL.md +166 -0
- package/enhancements/0.5/.claude/skills/trellis-route/SKILL.md +159 -0
- package/enhancements/0.5/.claude/skills/trellis-run-full-chain/SKILL.md +402 -0
- package/enhancements/0.5/.claude/skills/trellis-sync-prd/SKILL.md +150 -0
- package/enhancements/0.5/.claude/skills/trellis-verify-prd/SKILL.md +217 -0
- package/enhancements/0.5/overrides/trellis-route.md +52 -0
- package/enhancements/0.6/.agents/skills/trellis-check-all/SKILL.md +342 -0
- package/enhancements/0.6/.agents/skills/trellis-create-command/SKILL.md +293 -0
- package/enhancements/0.6/.agents/skills/trellis-draw-uml/SKILL.md +148 -0
- package/enhancements/0.6/.agents/skills/trellis-extract-prd/SKILL.md +197 -0
- package/enhancements/0.6/.agents/skills/trellis-plan-version/SKILL.md +140 -0
- package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +316 -0
- package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +159 -0
- package/enhancements/0.6/.agents/skills/trellis-run-full-chain/SKILL.md +402 -0
- package/enhancements/0.6/.agents/skills/trellis-verify-task/SKILL.md +360 -0
- package/enhancements/0.6/.claude/skills/trellis-check-all/SKILL.md +342 -0
- package/enhancements/0.6/.claude/skills/trellis-create-command/SKILL.md +293 -0
- package/enhancements/0.6/.claude/skills/trellis-draw-uml/SKILL.md +148 -0
- package/enhancements/0.6/.claude/skills/trellis-extract-prd/SKILL.md +197 -0
- package/enhancements/0.6/.claude/skills/trellis-plan-version/SKILL.md +140 -0
- package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +316 -0
- package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +159 -0
- package/enhancements/0.6/.claude/skills/trellis-run-full-chain/SKILL.md +402 -0
- package/enhancements/0.6/.claude/skills/trellis-verify-task/SKILL.md +360 -0
- package/enhancements/0.6/overrides/workflow-states/in_progress-inline.md +5 -0
- package/enhancements/0.6/overrides/workflow-states/in_progress.md +7 -0
- package/enhancements/0.6/overrides/workflow-states/no_task.md +6 -0
- package/enhancements/0.6/overrides/workflow-states/planning.md +6 -0
- package/enhancements/0.6/overrides/workflow.md +53 -0
- package/enhancements/MANIFEST.json +109 -0
- package/enhancements/old/.agents/skills/analyze-task/SKILL.md +143 -0
- package/enhancements/old/.agents/skills/check-all/SKILL.md +128 -0
- package/enhancements/old/.agents/skills/check-impl/SKILL.md +159 -0
- package/enhancements/old/.agents/skills/check-prd/SKILL.md +219 -0
- package/enhancements/old/.agents/skills/check-prd-impl/SKILL.md +190 -0
- package/enhancements/old/.agents/skills/create-prd/SKILL.md +154 -0
- package/enhancements/old/.agents/skills/draw-uml/SKILL.md +148 -0
- package/enhancements/old/.agents/skills/plan-version/SKILL.md +140 -0
- package/enhancements/old/.agents/skills/push/SKILL.md +191 -0
- package/enhancements/old/.agents/skills/re-implement/SKILL.md +166 -0
- package/enhancements/old/.agents/skills/sync-prd/SKILL.md +146 -0
- package/enhancements/old/.claude/commands/trellis/analyze-task.md +139 -0
- package/enhancements/old/.claude/commands/trellis/check-all.md +124 -0
- package/enhancements/old/.claude/commands/trellis/check-impl.md +154 -0
- package/enhancements/old/.claude/commands/trellis/check-prd-impl.md +186 -0
- package/enhancements/old/.claude/commands/trellis/check-prd.md +215 -0
- package/enhancements/old/.claude/commands/trellis/create-prd.md +150 -0
- package/enhancements/old/.claude/commands/trellis/draw-uml.md +144 -0
- package/enhancements/old/.claude/commands/trellis/plan-version.md +136 -0
- package/enhancements/old/.claude/commands/trellis/push.md +187 -0
- package/enhancements/old/.claude/commands/trellis/re-implement.md +162 -0
- package/enhancements/old/.claude/commands/trellis/sync-prd.md +142 -0
- package/package.json +39 -0
- package/src/cli.js +151 -0
- package/src/commands/init.js +66 -0
- package/src/commands/uninstall.js +85 -0
- package/src/commands/update.js +42 -0
- package/src/constants.js +50 -0
- package/src/lib/apply-enhancements.js +133 -0
- package/src/lib/banner.js +45 -0
- package/src/lib/codex-tweaks.js +112 -0
- package/src/lib/copy-skills.js +91 -0
- package/src/lib/fs-utils.js +60 -0
- package/src/lib/legacy-blocks.js +70 -0
- package/src/lib/manifest.js +32 -0
- package/src/lib/paths.js +16 -0
- package/src/lib/pick-platforms.js +57 -0
- package/src/lib/trellis-runner.js +190 -0
- package/src/lib/variant.js +40 -0
- package/src/lib/versions.js +30 -0
- package/src/lib/workflow-inject.js +193 -0
|
@@ -0,0 +1,217 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trellis-verify-prd
|
|
3
|
+
description: "Audit prd.md against the original requirements doc (screenshots / tables / prose) via forward check (PRD→source) + reverse coverage scan (source→PRD); flag missing, misinterpreted, embellished, or UI-copy-mismatch items and propose edits. Triggers: 「校验 PRD」「对照原始需求」「verify PRD」. Not for PRD generation (trellis-brainstorm) or implementation-vs-PRD check (trellis-check-all)."
|
|
4
|
+
---
|
|
5
|
+
# 校验 PRD — 对照原始需求文档
|
|
6
|
+
|
|
7
|
+
对照用户提供的原始需求文档(需求规格说明、PRD 截图、文字描述等),逐条校验生成的 `prd.md` 是否准确还原了原始需求,标记所有偏差并修正。同时扫描原始需求文档中的**所有本次版本变更内容**,检查是否存在被 PRD 遗漏的变更点。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 核心原则(不可违反)
|
|
12
|
+
|
|
13
|
+
1. **原始需求文档是唯一权威** — PRD 内容必须忠实反映原始需求,不得自行"理解"、"推演"或"发挥"
|
|
14
|
+
2. **逐条对照,不跳不漏** — 原始需求的每一个条目都必须在 PRD 中找到对应描述
|
|
15
|
+
3. **标记偏差类型** — 区分"缺失"、"曲解"、"发挥过度"、"措辞不准"
|
|
16
|
+
4. **文案必须逐字一致** — 原始需求中出现的用户可见文案(按钮文字、提示语、Toast、弹窗内容、表头、placeholder 等)必须与 PRD **逐字一致**;文案不一致直接标记为 ❌ 曲解(不是 ⚠️ 措辞偏差),因为前端会照搬 PRD 文案实现
|
|
17
|
+
5. **只改偏差,不改结构** — 修正内容错误,不改变 PRD 整体格式框架
|
|
18
|
+
6. **版本变更全覆盖** — 原始需求中属于本次版本的所有变更内容都必须被某个任务/PRD 覆盖,不得遗漏
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## 适用场景
|
|
23
|
+
|
|
24
|
+
- PRD 刚生成(`trellis-brainstorm` 之后)尚未进入开发,需要对照原始需求文档做正反双向核对
|
|
25
|
+
- 需求文档更新后,想确认 PRD 是否仍完整反映了最新版本的所有变更
|
|
26
|
+
- 多任务 / 多 PRD 并行时,怀疑某次版本变更被漏挂到任何任务下
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## 执行步骤
|
|
31
|
+
|
|
32
|
+
### Step 1: 定位文件
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 获取当前任务
|
|
36
|
+
python3 ./.trellis/scripts/task.py list
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
读取任务目录下的 `prd.md`。如果不存在,提示用户先创建。
|
|
40
|
+
|
|
41
|
+
### Step 2: 获取原始需求文档
|
|
42
|
+
|
|
43
|
+
**必须主动获取原始需求文档来源**。按以下优先级查找:
|
|
44
|
+
|
|
45
|
+
1. **任务目录下的附件** — 检查任务目录下是否有 `requirements.md`、`spec.md`、`需求.md`、`*.xlsx`、`*.pdf` 等文件
|
|
46
|
+
2. **PRD 中的引用链接** — 检查 PRD 中是否引用了外部文档链接
|
|
47
|
+
3. **用户提供** — 如果上述都没有,**明确询问用户**:
|
|
48
|
+
|
|
49
|
+
```markdown
|
|
50
|
+
当前任务目录下未找到原始需求文档。请提供需求来源:
|
|
51
|
+
|
|
52
|
+
1. **粘贴需求文本** — 直接粘贴原始需求内容
|
|
53
|
+
2. **指定文件路径** — 告诉我需求文档在哪里
|
|
54
|
+
3. **口述要点** — 口头说明关键需求点
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
> **[!] 严禁在没有原始需求文档的情况下进行校验** — 没有参照物的校验没有意义。
|
|
58
|
+
|
|
59
|
+
### Step 3: 逐条对照
|
|
60
|
+
|
|
61
|
+
将原始需求文档分解为独立条目(逐个需求点/AC/功能点),然后逐条在 PRD 中查找对应描述。
|
|
62
|
+
|
|
63
|
+
对每一条标记状态:
|
|
64
|
+
|
|
65
|
+
| 状态 | 含义 | 示例 |
|
|
66
|
+
|------|------|------|
|
|
67
|
+
| ✅ 准确 | PRD 忠实还原了原始需求 | — |
|
|
68
|
+
| ⚠️ 措辞偏差 | 意思基本对,但措辞可能引起歧义 | 原始:"下一行" → PRD:"下一条未完结任务" |
|
|
69
|
+
| ❌ 曲解 | PRD 理解错了原始需求的意思 | 原始:"按当前列表排序" → PRD:"按 taskNo 正序" |
|
|
70
|
+
| ❌ 文案不一致 | UI 可见文案与原始需求不逐字一致(按钮、提示语、Toast、弹窗、表头、placeholder 等) | 原始:提示"确认提交?" → PRD:"确认保存?" |
|
|
71
|
+
| 🔴 缺失 | 原始需求有,PRD 里完全没提 | — |
|
|
72
|
+
| 🟡 自行发挥 | PRD 写了原始需求没有的内容 | — |
|
|
73
|
+
|
|
74
|
+
### Step 3.5: 覆盖度扫描(反向检查)
|
|
75
|
+
|
|
76
|
+
Step 3 是**正向检查**(PRD 里的内容 → 原始文档里是否有)。
|
|
77
|
+
Step 3.5 是**反向检查**(原始文档里本次版本的变更 → PRD 里是否覆盖)。
|
|
78
|
+
|
|
79
|
+
#### 3.5.1 识别本次版本的所有变更内容
|
|
80
|
+
|
|
81
|
+
**不要假设需求文档有固定格式。** 根据文档的实际结构,使用以下策略组合来识别变更:
|
|
82
|
+
|
|
83
|
+
| 策略 | 适用场景 | 方法 |
|
|
84
|
+
|------|---------|------|
|
|
85
|
+
| **标记扫描** | 文档用标记标注变更(如 `[v1.2.0变更]`、`[新增]`、`[变更]`) | grep 全文搜索所有标记,**包括段落中间嵌入的标记** |
|
|
86
|
+
| **需求总表** | 文档有需求列表/变更日志表格 | 读取表格中「版本」「更新内容」列,提取本次版本的条目 |
|
|
87
|
+
| **章节对比** | 文档无显式标记,但有版本说明章节 | 读取版本说明/变更日志章节,提取所有变更描述 |
|
|
88
|
+
| **全文语义** | 文档无任何结构化标记 | 通读全文,识别「新增」「变更」「调整」「优化」等动作词所在段落 |
|
|
89
|
+
|
|
90
|
+
> **[!] 关键:必须扫描全文,不能只看目录/总表/标题。**
|
|
91
|
+
> 很多变更是**嵌入在大段描述中间的字段级变更**,只看结构性位置会遗漏。
|
|
92
|
+
|
|
93
|
+
#### 3.5.2 定位每个变更所属的需求单元
|
|
94
|
+
|
|
95
|
+
对每个识别到的变更内容,确定它属于哪个需求单元(REQ 编号、功能模块、页面等)。
|
|
96
|
+
定位方式取决于文档结构:
|
|
97
|
+
- 有编号体系的:向上查找最近的需求标题
|
|
98
|
+
- 无编号体系的:按章节/功能模块归类
|
|
99
|
+
|
|
100
|
+
#### 3.5.3 交叉比对
|
|
101
|
+
|
|
102
|
+
将所有变更按需求单元归组后,与 PRD 中已覆盖的范围做差集:
|
|
103
|
+
|
|
104
|
+
| 检查项 | 说明 |
|
|
105
|
+
|--------|------|
|
|
106
|
+
| **已覆盖** | 变更所属需求单元在 PRD 中有对应任务/测试项 |
|
|
107
|
+
| **未覆盖** | 变更所属需求单元完全不在 PRD 范围内 |
|
|
108
|
+
| **部分覆盖** | 需求单元在 PRD 中有对应,但该单元内的某些变更点未被提及 |
|
|
109
|
+
|
|
110
|
+
> **特别注意散射型变更**:同一个功能点可能散布在多个需求单元中。
|
|
111
|
+
> 即使主需求已覆盖,也要检查所有关联位置。
|
|
112
|
+
|
|
113
|
+
#### 3.5.4 输出覆盖度清单
|
|
114
|
+
|
|
115
|
+
对未覆盖和部分覆盖的变更,列出详情供 Step 4 报告使用。
|
|
116
|
+
|
|
117
|
+
---
|
|
118
|
+
|
|
119
|
+
### Step 4: 输出校验报告
|
|
120
|
+
|
|
121
|
+
```markdown
|
|
122
|
+
## PRD 校验报告
|
|
123
|
+
|
|
124
|
+
### 任务: <任务名称>
|
|
125
|
+
|
|
126
|
+
### 一、准确性校验
|
|
127
|
+
|
|
128
|
+
#### 总览
|
|
129
|
+
- 原始需求条目数: N
|
|
130
|
+
- ✅ 准确: X 条
|
|
131
|
+
- ⚠️ 措辞偏差: X 条
|
|
132
|
+
- ❌ 曲解: X 条
|
|
133
|
+
- 🔴 缺失: X 条
|
|
134
|
+
- 🟡 自行发挥: X 条
|
|
135
|
+
|
|
136
|
+
#### 逐条对照
|
|
137
|
+
|
|
138
|
+
##### <需求点 1 标题>
|
|
139
|
+
- **原始需求**: <原文摘抄>
|
|
140
|
+
- **PRD 描述**: <PRD 中的对应内容>
|
|
141
|
+
- **状态**: ✅ / ⚠️ / ❌ / 🔴 / 🟡
|
|
142
|
+
- **问题**: <如果有偏差,说明具体问题>
|
|
143
|
+
- **建议修正**: <如果需要修正,给出建议>
|
|
144
|
+
|
|
145
|
+
##### <需求点 2 标题>
|
|
146
|
+
...
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### 二、覆盖度扫描
|
|
151
|
+
|
|
152
|
+
#### 总览
|
|
153
|
+
- 原始文档版本变更总数: N
|
|
154
|
+
- ✅ 已覆盖: X 个
|
|
155
|
+
- 🔴 未覆盖: X 个
|
|
156
|
+
- ⚠️ 部分覆盖: X 个
|
|
157
|
+
|
|
158
|
+
#### 未覆盖的变更点
|
|
159
|
+
|
|
160
|
+
| 需求单元 | 位置 | 变更内容摘要 | 影响范围 |
|
|
161
|
+
|---------|------|-------------|---------|
|
|
162
|
+
|
|
163
|
+
#### 部分覆盖的变更点
|
|
164
|
+
|
|
165
|
+
| 需求单元 | 位置 | 变更内容摘要 | PRD 中已有的覆盖 | 缺失的部分 |
|
|
166
|
+
|---------|------|-------------|----------------|-----------|
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### 三、结论
|
|
171
|
+
- <总结性评价>
|
|
172
|
+
- <准确性是否需要修正>
|
|
173
|
+
- <覆盖度缺口是否需要补充任务>
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Step 5: 修正 PRD(需用户确认)
|
|
177
|
+
|
|
178
|
+
如果发现偏差,**先列出所有修正项,获得用户确认后再修改 `prd.md`**。
|
|
179
|
+
|
|
180
|
+
```markdown
|
|
181
|
+
以下是建议的修正项:
|
|
182
|
+
|
|
183
|
+
1. **<需求点>**: <原 PRD 内容> → <修正后内容>
|
|
184
|
+
2. ...
|
|
185
|
+
|
|
186
|
+
确认后我将更新 prd.md。
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
修正时遵循:
|
|
190
|
+
- **只改内容偏差,不改 PRD 格式**
|
|
191
|
+
- **优先使用原始需求文档的原文措辞**
|
|
192
|
+
- **标注修正来源**:在 Technical Notes 中记录本次校验
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## 反模式(避免)
|
|
197
|
+
|
|
198
|
+
- ❌ 没有原始需求文档就凭感觉校验
|
|
199
|
+
- ❌ 只看标题不看细节(AC 级别逐条对照)
|
|
200
|
+
- ❌ 发现偏差不标记类型,笼统说"有出入"
|
|
201
|
+
- ❌ 未经确认直接修改 PRD
|
|
202
|
+
- ❌ 校验时加入自己的"理解"和"建议"(只对照,不发挥)
|
|
203
|
+
- ❌ UI 文案不一致却只标记为 ⚠️ 措辞偏差(用户可见文案必须逐字一致,不一致直接标记 ❌)
|
|
204
|
+
- ❌ 覆盖度扫描只看需求总表/目录,不扫描全文(嵌入式变更会遗漏)
|
|
205
|
+
- ❌ 假设需求文档有固定的变更标记格式(每份文档结构可能不同)
|
|
206
|
+
- ❌ 只追踪主需求单元,忽略同一功能点在其他页面/模块的散射变更
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 与其他入口的区别
|
|
211
|
+
|
|
212
|
+
| 入口 | 形态 | 用途 | 时机 |
|
|
213
|
+
|------|------|------|------|
|
|
214
|
+
| `trellis-brainstorm` | skill | 从模糊想法生成 PRD | 需求讨论阶段 |
|
|
215
|
+
| `trellis-verify-prd` | skill(本技能) | 对照原始需求文档校验 PRD(准确性 + 覆盖度) | PRD 生成后、开发前 |
|
|
216
|
+
| `trellis-analyze-task` | skill | 分析任务可行性和风险 | 开发前 |
|
|
217
|
+
| `trellis-check-all` | skill | 代码实现对照 PRD 全面检查 | 编码完成后、提交前 |
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trellis-analyze-task
|
|
3
|
+
description: "Analyze and refine an existing task under .trellis/tasks/: read task.json + prd.md + related code, output scope/risks/ambiguities report, then ask clarifying questions one at a time to update prd.md/task.json in real-time. Triggers: 「分析任务」「细化任务」「这个任务怎么做」. For brand-new features without a task yet, use trellis-brainstorm."
|
|
4
|
+
---
|
|
5
|
+
# 任务深度分析与细化
|
|
6
|
+
|
|
7
|
+
对 `.trellis/tasks/` 下的已有任务进行深入分析,提供全景预览、识别风险点,并通过交互式问答细化任务内容。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 适用场景
|
|
12
|
+
|
|
13
|
+
- 已有 task 但需求不够清晰,需要拆解成可执行步骤
|
|
14
|
+
- 任务拿到后还不确定影响面、风险点或不明确处
|
|
15
|
+
- 开发前的深度细化环节
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## 执行步骤
|
|
20
|
+
|
|
21
|
+
### Step 1: 定位任务
|
|
22
|
+
|
|
23
|
+
参数:`task-slug`(可选)。提供时直接定位,未提供时列出所有活跃任务让用户选择。
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
# 未指定任务时,列出所有活跃任务
|
|
27
|
+
python3 ./.trellis/scripts/task.py list
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
- 如果用户未指定任务,展示任务列表并用 `AskUserQuestion` 让用户选择
|
|
31
|
+
- 定位后,读取任务目录下的 `task.json` 和 `prd.md`(如果存在)
|
|
32
|
+
|
|
33
|
+
### Step 2: 上下文收集(静默执行,不问用户)
|
|
34
|
+
|
|
35
|
+
在分析之前,自动收集信息:
|
|
36
|
+
|
|
37
|
+
1. **任务文件**:读取 `task.json`、`prd.md`(如果有)
|
|
38
|
+
2. **相关代码**:如果任务涉及具体模块,快速扫描相关代码结构
|
|
39
|
+
3. **依赖任务**:检查是否有关联或依赖的任务
|
|
40
|
+
4. **历史记录**:检查 journal 中是否有该任务的相关记录
|
|
41
|
+
|
|
42
|
+
### Step 3: 输出分析报告
|
|
43
|
+
|
|
44
|
+
以下列结构输出分析报告:
|
|
45
|
+
|
|
46
|
+
```markdown
|
|
47
|
+
## 任务分析报告: <任务标题>
|
|
48
|
+
|
|
49
|
+
### 概述
|
|
50
|
+
<用 2-3 句话总结这个任务要做什么、为什么要做>
|
|
51
|
+
|
|
52
|
+
### 工作预览
|
|
53
|
+
预计需要做的事情:
|
|
54
|
+
1. <步骤 1>
|
|
55
|
+
2. <步骤 2>
|
|
56
|
+
3. ...
|
|
57
|
+
|
|
58
|
+
### 涉及范围
|
|
59
|
+
- **模块/文件**: <涉及哪些模块或文件>
|
|
60
|
+
- **影响面**: <这个变更会影响到什么>
|
|
61
|
+
- **依赖**: <需要什么前置条件>
|
|
62
|
+
|
|
63
|
+
### 风险点
|
|
64
|
+
1. <风险 1>: <说明 + 可能的后果>
|
|
65
|
+
2. <风险 2>: <说明 + 可能的后果>
|
|
66
|
+
|
|
67
|
+
### 不明确的地方
|
|
68
|
+
1. <问题 1>: <为什么这个需要澄清>
|
|
69
|
+
2. <问题 2>: <为什么这个需要澄清>
|
|
70
|
+
|
|
71
|
+
### 建议
|
|
72
|
+
- <可选的改进建议或替代方案>
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Step 4: 交互式反问
|
|
76
|
+
|
|
77
|
+
报告输出后,**逐个**向用户提出不明确的问题(每次只问一个)。
|
|
78
|
+
|
|
79
|
+
使用 `AskUserQuestion` 工具提问,优先提供选项:
|
|
80
|
+
|
|
81
|
+
```markdown
|
|
82
|
+
关于 <问题主题>,你倾向于哪种方式?
|
|
83
|
+
|
|
84
|
+
1. **选项 A** — <含义 + 利弊>
|
|
85
|
+
2. **选项 B** — <含义 + 利弊>
|
|
86
|
+
3. **其他** — 你来说明
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
### Step 5: 根据反馈更新任务
|
|
90
|
+
|
|
91
|
+
每收到一个回答后:
|
|
92
|
+
1. **立即更新** `prd.md`(如果存在)或创建新的 `prd.md`
|
|
93
|
+
2. **更新** `task.json` 中的相关字段(如优先级、描述等)
|
|
94
|
+
3. 继续下一个问题,直到所有不明确的地方都澄清
|
|
95
|
+
|
|
96
|
+
### Step 6: 输出细化结果
|
|
97
|
+
|
|
98
|
+
所有问题回答完毕后,输出最终的细化摘要:
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
## 任务细化完成
|
|
102
|
+
|
|
103
|
+
### 变更摘要
|
|
104
|
+
- <列出 prd.md / task.json 的变更内容>
|
|
105
|
+
|
|
106
|
+
### 下一步
|
|
107
|
+
- 如果准备开发:运行 `trellis-continue` 进入/继续开发流程
|
|
108
|
+
- 如果需要进一步讨论:继续对话
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 核心原则
|
|
114
|
+
|
|
115
|
+
| 原则 | 说明 |
|
|
116
|
+
|------|------|
|
|
117
|
+
| **先分析后提问** | 先展示你的分析和理解,再提问 |
|
|
118
|
+
| **每次只问一个问题** | 不要用问题列表轰炸用户 |
|
|
119
|
+
| **提供选项** | 尽量给出可选方案而非开放式问题 |
|
|
120
|
+
| **即时更新** | 每次收到回答立即更新文档 |
|
|
121
|
+
| **识别真正的风险** | 区分「可能的风险」和「确定的风险」 |
|
|
122
|
+
| **YAGNI** | 挑战不必要的复杂度,聚焦真正需要的 |
|
|
123
|
+
|
|
124
|
+
---
|
|
125
|
+
|
|
126
|
+
## 与其他入口的区别
|
|
127
|
+
|
|
128
|
+
| 入口 | 形态 | 用途 | 输入 |
|
|
129
|
+
|------|------|------|------|
|
|
130
|
+
| `trellis-brainstorm` | skill | 从模糊想法出发,发现需求 | 用户的初始想法(尚无 task) |
|
|
131
|
+
| `trellis-analyze-task` | skill(本技能) | 对已有任务深入分析和细化 | 已存在的 task |
|
|
132
|
+
| `trellis-continue` | 命令 | 进入/继续开发流程 | 已有 prd.md 的任务 |
|
|
133
|
+
|
|
134
|
+
---
|
|
135
|
+
|
|
136
|
+
## 反模式(避免)
|
|
137
|
+
|
|
138
|
+
- ❌ 直接输出一大堆问题让用户回答
|
|
139
|
+
- ❌ 不看代码就做分析(先收集上下文)
|
|
140
|
+
- ❌ 分析报告过于笼统(要具体到文件和模块)
|
|
141
|
+
- ❌ 过度细化不重要的细节
|
|
142
|
+
- ❌ 忽略跨模块影响
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: trellis-check-all
|
|
3
|
+
description: "Full pre-commit/PR review in 3 steps: PRD-implementation correctness → 5-dim assumption validation (API, component context, data history/flow, tests) → cross-layer completeness + spec compliance (delegates to trellis-check). Pauses on ❌. Triggers: 「全面检查」「提交前检查」「check-all」「从 PRD 到代码过一遍」. For lint/spec-only, use trellis-check directly."
|
|
4
|
+
---
|
|
5
|
+
# Check All — 全维度代码检查
|
|
6
|
+
|
|
7
|
+
依次执行三个维度的代码检查,一次性完成全维度质量验证。
|
|
8
|
+
|
|
9
|
+
> 顺序逻辑:**正确性 → 假设验证 → 完整性+规范性**
|
|
10
|
+
> 先保证"做对了",再保证"做全了",最后保证"写好了"。
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## 执行模式
|
|
15
|
+
|
|
16
|
+
**各 Step 的具体 check 在主对话中直接展开执行,不要用 Agent 工具委派给子 agent 跑。**
|
|
17
|
+
|
|
18
|
+
原因:
|
|
19
|
+
- 各 Step 中存在"发现问题立即暂停询问用户"的交互点,子 agent 无法交互式暂停
|
|
20
|
+
- 检查结果的具体细节(哪一行、哪个假设错了)对后续修复很关键,子 agent 的摘要式返回会丢失细节
|
|
21
|
+
|
|
22
|
+
**例外**:仅当用户显式要求"用子 agent 跑各 Step"或"并行执行"时,才使用 Agent 工具委派。
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## 三个维度(按顺序执行)
|
|
27
|
+
|
|
28
|
+
| 顺序 | 维度 | 检查什么 | 对照物 |
|
|
29
|
+
|------|------|---------|--------|
|
|
30
|
+
| 1 | PRD 实现 | 实现对不对 | PRD |
|
|
31
|
+
| 2 | 假设验证 | 假设对不对 | 源码/真实数据 |
|
|
32
|
+
| 3 | 完整性+规范性(trellis-check) | 改全了没 + 写得规范吗 | git diff 影响范围 + spec 开发规范 |
|
|
33
|
+
|
|
34
|
+
---
|
|
35
|
+
|
|
36
|
+
## Step 0: 确认变更范围
|
|
37
|
+
|
|
38
|
+
```bash
|
|
39
|
+
git diff --name-only
|
|
40
|
+
git log --oneline -10
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
如果无变更,提示用户并终止。
|
|
44
|
+
|
|
45
|
+
读取当前任务的 `prd.md`(由 trellis 的 session hook 自动加载,或手动确认任务目录)。如果没有 PRD,跳过 Step 1 从 Step 2 开始。
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Step 1: 对照 PRD 检查实现
|
|
50
|
+
|
|
51
|
+
**重点**:PRD 中的每条需求和 AC 是否都正确实现了?有没有行为偏差、功能缺失、文案不一致?
|
|
52
|
+
|
|
53
|
+
### 1.1 核心原则(不可违反)
|
|
54
|
+
|
|
55
|
+
1. **PRD 是验收标准** — 每条 Requirement 和 AC 都必须在代码中找到对应实现,找不到即为缺失
|
|
56
|
+
2. **逐条追踪,不跳不漏** — 不能只看 happy path,PRD 中提到的边界条件、异常处理、空值场景都要追踪
|
|
57
|
+
3. **读代码,不猜代码** — 必须实际读到实现代码,不能因为"应该写了"就标记通过
|
|
58
|
+
4. **文案逐字比对** — PRD 中的 UI 文案(按钮、提示语、Toast、弹窗、表头、placeholder)必须与代码中的字面值**完全一致**
|
|
59
|
+
5. **只报事实,不加发挥** — 报告中只陈述 PRD 要求 vs 代码实现的差异,不要加入 PRD 之外的建议
|
|
60
|
+
|
|
61
|
+
### 1.2 分解 PRD 为可验证条目
|
|
62
|
+
|
|
63
|
+
从 PRD 中提取(按优先级):
|
|
64
|
+
1. **Acceptance Criteria** — 最直接的验证条目
|
|
65
|
+
2. **Requirements** — 每条需求对应的行为
|
|
66
|
+
3. **业务规则** — 条件判断、计算逻辑、状态流转
|
|
67
|
+
4. **UI 文案** — 所有用户可见文字
|
|
68
|
+
5. **边界/异常场景** — 空值处理、上限、错误提示等
|
|
69
|
+
|
|
70
|
+
每条记录格式:`[条目ID] <PRD 原文摘要> — 来源:<PRD 中位置>`
|
|
71
|
+
|
|
72
|
+
### 1.3 逐条追踪代码实现
|
|
73
|
+
|
|
74
|
+
根据条目类型定位实现:
|
|
75
|
+
|
|
76
|
+
| 条目类型 | 搜索方法 |
|
|
77
|
+
|---------|---------|
|
|
78
|
+
| API 接口行为 | Controller → Service → DAO,追踪完整链路 |
|
|
79
|
+
| 前端交互行为 | 组件文件,事件处理、状态管理 |
|
|
80
|
+
| 数据校验规则 | 前端 rules + 后端 validator/service,两端都查 |
|
|
81
|
+
| UI 文案 | grep 关键字,前端代码精确匹配 |
|
|
82
|
+
| 计算/转换逻辑 | service 层,读具体算法 |
|
|
83
|
+
| 状态流转 | 状态枚举 + 转换条件代码 |
|
|
84
|
+
|
|
85
|
+
对每条标记状态:
|
|
86
|
+
|
|
87
|
+
| 状态 | 含义 |
|
|
88
|
+
|------|------|
|
|
89
|
+
| ✅ 已实现 | 代码正确实现了 PRD 要求(已读代码确认) |
|
|
90
|
+
| ❌ 实现偏差 | 代码实现了,但行为与 PRD 描述不一致 |
|
|
91
|
+
| 🔴 未实现 | 代码中找不到对应实现 |
|
|
92
|
+
| ⚠️ 部分实现 | 核心逻辑有,但缺少边界/异常处理 |
|
|
93
|
+
| 🟡 文案不一致 | UI 文案与 PRD 不逐字一致 |
|
|
94
|
+
|
|
95
|
+
### 1.4 重点检查场景(最容易漏)
|
|
96
|
+
|
|
97
|
+
- **条件判断** — PRD 说"当 X 时做 Y",if 条件是否完整?是否漏边界值?
|
|
98
|
+
- **空值/零值** — PRD 提到的字段,代码在该字段为空时是否有处理?
|
|
99
|
+
- **列表为空** — 列表展示是否有空状态/提示?
|
|
100
|
+
- **并发/时序** — 多步操作是否处理了中间状态?
|
|
101
|
+
- **权限控制** — PRD 提到的按钮/操作,是否加了权限判断?
|
|
102
|
+
- **前后端一致** — 同一条规则前后端是否都实现了?
|
|
103
|
+
|
|
104
|
+
### 1.5 问题记录模板
|
|
105
|
+
|
|
106
|
+
发现问题时按如下格式逐条记录(供最终汇总报告引用):
|
|
107
|
+
|
|
108
|
+
**❌ 实现偏差 / 🔴 未实现 / ⚠️ 部分实现**:
|
|
109
|
+
|
|
110
|
+
```markdown
|
|
111
|
+
##### [条目ID] <PRD 原文摘要>
|
|
112
|
+
- **PRD 要求**:<原文>
|
|
113
|
+
- **实际实现**:<代码行为描述>
|
|
114
|
+
- **代码位置**:<文件路径:行号>
|
|
115
|
+
- **偏差/缺失说明**:<具体差异或缺失点>
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
**🟡 文案不一致**(用表格汇总):
|
|
119
|
+
|
|
120
|
+
| PRD 文案 | 代码文案 | 代码位置 |
|
|
121
|
+
|---------|---------|---------|
|
|
122
|
+
|
|
123
|
+
> **如果发现 ❌ 实现偏差或 🔴 未实现,立即暂停**,展示问题并询问用户:
|
|
124
|
+
> - 先修复再继续后续检查?
|
|
125
|
+
> - 还是先跑完全部检查,最后统一修复?
|
|
126
|
+
|
|
127
|
+
---
|
|
128
|
+
|
|
129
|
+
## Step 2: 实现假设验证
|
|
130
|
+
|
|
131
|
+
**重点**:API 响应结构、组件生命周期、历史数据兼容性等假设是否正确?大多数实现 bug 不是逻辑错误,而是前提假设错了。
|
|
132
|
+
|
|
133
|
+
根据变更类型选择适用的 Dimension 检查:
|
|
134
|
+
|
|
135
|
+
### Dimension A: API Contract(调用了已有 API 时)
|
|
136
|
+
|
|
137
|
+
**Trigger**:前端新增/修改了对后端 API 的调用
|
|
138
|
+
|
|
139
|
+
**Checklist**:
|
|
140
|
+
- [ ] 读过 Controller/Handler 源码,确认实际响应结构?
|
|
141
|
+
- [ ] 找到项目中已有的同 API 调用代码作为参考?
|
|
142
|
+
- [ ] 请求参数名、类型、默认值从源码确认(非凭记忆)?
|
|
143
|
+
- [ ] 分页接口:确认了分页字段名和起始页码?
|
|
144
|
+
|
|
145
|
+
**典型错误假设**:
|
|
146
|
+
|
|
147
|
+
| 错误假设 | 实际情况 |
|
|
148
|
+
|---------|---------|
|
|
149
|
+
| `res.data.data` 是数组 | 实际是 `{ items: [], total }` 分页结构 |
|
|
150
|
+
| 参数名是 `page` | 实际是 `p`,且从 1 开始 |
|
|
151
|
+
| 响应直接是业务数据 | 实际包了一层 `{ success, message, data }` |
|
|
152
|
+
|
|
153
|
+
### Dimension B: Component Context(在容器内使用组件时)
|
|
154
|
+
|
|
155
|
+
**Trigger**:在 Modal / Drawer / Tab / 条件渲染块内使用有状态组件
|
|
156
|
+
|
|
157
|
+
**Checklist**:
|
|
158
|
+
- [ ] 确认容器关闭/切换时是否销毁子组件?
|
|
159
|
+
- [ ] 如需保持状态:是否用了 keepDOM / destroyOnClose={false} 等配置?
|
|
160
|
+
- [ ] 受控组件的 value 与外部 state 是否正确绑定?
|
|
161
|
+
- [ ] 找到项目中同容器内的组件用法作为参考?
|
|
162
|
+
|
|
163
|
+
**典型错误假设**:
|
|
164
|
+
|
|
165
|
+
| 错误假设 | 实际情况 |
|
|
166
|
+
|---------|---------|
|
|
167
|
+
| Modal 关闭后表单状态保留 | 默认销毁子组件,再开状态丢失 |
|
|
168
|
+
| value 传了就是受控 | 某些组件需 initValue + value 配合 |
|
|
169
|
+
| 组件在任何地方行为一致 | 容器上下文会影响挂载/卸载行为 |
|
|
170
|
+
|
|
171
|
+
### Dimension C: Data History(修改了数据模型时)
|
|
172
|
+
|
|
173
|
+
**Trigger**:数据库表新增/修改了字段
|
|
174
|
+
|
|
175
|
+
**Checklist**:
|
|
176
|
+
- [ ] 历史记录的新字段值是什么(空/零值/null)?
|
|
177
|
+
- [ ] 用新字段过滤时,历史数据能否被正确查到?
|
|
178
|
+
- [ ] 是否需要降级查询路径(如从其他表补查历史数据)?
|
|
179
|
+
- [ ] 写入链路中新字段的值从哪来?来源是否可靠?
|
|
180
|
+
|
|
181
|
+
**典型错误假设**:
|
|
182
|
+
|
|
183
|
+
| 错误假设 | 实际情况 |
|
|
184
|
+
|---------|---------|
|
|
185
|
+
| 加了字段就有数据 | 旧记录新字段全是零值/空值 |
|
|
186
|
+
| 只查聚合表就够了 | 聚合表缺维度,需从明细表降级查询 |
|
|
187
|
+
| 字段值肯定有 | 某些调用链路中该值可能为空 |
|
|
188
|
+
|
|
189
|
+
### Dimension D: Data Flow Trace(跨层变更时)
|
|
190
|
+
|
|
191
|
+
**Trigger**:变更涉及 前端 ↔ API ↔ 数据库 的数据传递
|
|
192
|
+
|
|
193
|
+
**Checklist**:
|
|
194
|
+
- [ ] 模拟一条完整请求路径:前端发什么 → 后端收什么 → 查出什么 → 返回什么 → 前端解析什么?
|
|
195
|
+
- [ ] 前端参数名 === 后端 Query/Body 参数名?
|
|
196
|
+
- [ ] 后端返回结构 === 前端解析结构?
|
|
197
|
+
- [ ] 空值/零值场景:不填该字段时,每一层的行为是否正确?
|
|
198
|
+
|
|
199
|
+
**典型错误假设**:
|
|
200
|
+
|
|
201
|
+
| 错误假设 | 实际情况 |
|
|
202
|
+
|---------|---------|
|
|
203
|
+
| 代码看起来对就能跑 | 参数名差一个字母、嵌套差一层 |
|
|
204
|
+
| 只检查非空路径 | 空值路径才是出 bug 最多的地方 |
|
|
205
|
+
| 前后端分别看都没问题 | 放一起跑时数据对不上 |
|
|
206
|
+
|
|
207
|
+
### Dimension E: Verification Tests(验证关键假设的测试)
|
|
208
|
+
|
|
209
|
+
**Trigger**:任何涉及 Dimension A-D 的变更
|
|
210
|
+
|
|
211
|
+
光靠肉眼审查不够,关键假设必须有可运行的验证手段:
|
|
212
|
+
|
|
213
|
+
- **API Contract 验证**:写请求测试验证实际响应结构与解析匹配,覆盖 happy + 空值/零值
|
|
214
|
+
- **数据模型验证**:用真实数据(含历史旧记录)验证过滤/聚合结果
|
|
215
|
+
- **跨层数据流验证**:端到端测试完整路径,覆盖空参数、特殊字符、零值
|
|
216
|
+
|
|
217
|
+
**验证原则**:
|
|
218
|
+
- 不要求高覆盖率,但每个 Dimension 中发现的关键假设至少有一个测试保护
|
|
219
|
+
- 优先写能暴露"想当然"问题的测试,而非走过场的 happy path
|
|
220
|
+
- 如果无法写自动化测试,记录手动验证步骤和预期结果
|
|
221
|
+
|
|
222
|
+
**典型错误做法**:
|
|
223
|
+
|
|
224
|
+
| 错误做法 | 正确做法 |
|
|
225
|
+
|---------|---------|
|
|
226
|
+
| 只写 happy path 测试 | 优先覆盖假设最脆弱的路径 |
|
|
227
|
+
| 测试写了但没跑 | 测试必须实际运行并通过 |
|
|
228
|
+
| "这个太简单不用测" | 越简单的假设越容易错(参数名、嵌套层级) |
|
|
229
|
+
|
|
230
|
+
### Common Issues Quick Reference(假设类 bug 速查)
|
|
231
|
+
|
|
232
|
+
| Issue | Root Cause | Prevention |
|
|
233
|
+
|-------|------------|------------|
|
|
234
|
+
| API 调用返回 undefined | 响应结构假设错误 | 读 Controller 确认 |
|
|
235
|
+
| 组件状态莫名丢失 | 容器销毁了子组件 | 检查容器生命周期 |
|
|
236
|
+
| 筛选后数据为空 | 历史记录缺字段 | 验证旧数据查询路径 |
|
|
237
|
+
| 参数传了但后端没收到 | 参数名不匹配 | 源码级确认参数名 |
|
|
238
|
+
| 看着对但跑不通 | 只做了静态审查 | 模拟完整数据流 |
|
|
239
|
+
|
|
240
|
+
> **如果发现假设错误**,同样立即暂停询问用户(先修复 or 跑完再统一修)。
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Step 3: 跨层完整性与代码规范检查
|
|
245
|
+
|
|
246
|
+
按 `.agents/skills/trellis-check/SKILL.md` 执行。
|
|
247
|
+
|
|
248
|
+
**重点**:变更涉及的所有层、所有引用点是否都同步更新了?代码是否符合项目 spec 中的编码规范?lint 和 typecheck 是否通过?
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## 输出:汇总报告
|
|
253
|
+
|
|
254
|
+
所有检查完成后,输出一份汇总报告:
|
|
255
|
+
|
|
256
|
+
```markdown
|
|
257
|
+
## Check All 汇总报告
|
|
258
|
+
|
|
259
|
+
### 任务: <任务名称>
|
|
260
|
+
|
|
261
|
+
---
|
|
262
|
+
|
|
263
|
+
### 各维度结果
|
|
264
|
+
|
|
265
|
+
| 维度 | 状态 | 问题数 | 关键问题 |
|
|
266
|
+
|------|------|--------|---------|
|
|
267
|
+
| PRD 实现 | ✅/❌ | N | <最严重的问题摘要> |
|
|
268
|
+
| 假设验证 | ✅/❌ | N | <最严重的问题摘要> |
|
|
269
|
+
| 跨层完整+规范 | ✅/❌ | N | <最严重的问题摘要> |
|
|
270
|
+
|
|
271
|
+
### 问题清单(按优先级排序)
|
|
272
|
+
|
|
273
|
+
#### P0 — 功能性 BUG(来自 Step 1 / Step 2)
|
|
274
|
+
<PRD 实现偏差 / 🔴 未实现 / 假设错误>
|
|
275
|
+
|
|
276
|
+
#### P1 — 完整性+规范问题(来自 Step 3)
|
|
277
|
+
<跨层遗漏 / lint / typecheck / 规范违反>
|
|
278
|
+
|
|
279
|
+
### 结论
|
|
280
|
+
- <总体评价:整体完成度>
|
|
281
|
+
- <建议修复顺序:P0 先修,P1 可视情况合并修>
|
|
282
|
+
```
|
|
283
|
+
|
|
284
|
+
---
|
|
285
|
+
|
|
286
|
+
## 修复问题(需用户确认)
|
|
287
|
+
|
|
288
|
+
如果发现问题,**先展示报告,获得用户确认后再修复**。
|
|
289
|
+
|
|
290
|
+
修复时遵循:
|
|
291
|
+
- **按严重程度排序**:❌ 实现偏差 > 🔴 未实现 > ⚠️ 部分实现 > 🟡 文案不一致 > P1 完整性/规范
|
|
292
|
+
- **每修一条标注 PRD 条目 ID 或问题位置**
|
|
293
|
+
- **修复后重新验证该条目**
|
|
294
|
+
|
|
295
|
+
---
|
|
296
|
+
|
|
297
|
+
## 使用时机
|
|
298
|
+
|
|
299
|
+
- **开发完成后、提交前** — 作为 `trellis-finish-work` 之前的全面检查
|
|
300
|
+
- **Code Review 前** — 自查一遍再提交 MR
|
|
301
|
+
- **不确定改动质量时** — 跑一遍全量检查心里有底
|
|
302
|
+
|
|
303
|
+
---
|
|
304
|
+
|
|
305
|
+
## 注意事项
|
|
306
|
+
|
|
307
|
+
- 每个维度独立输出报告,最后汇总
|
|
308
|
+
- 如果某个维度发现严重问题(❌ / 🔴),会暂停询问是否先修复
|
|
309
|
+
- 如果当前任务没有 PRD,自动跳过 Step 1,从 Step 2 开始
|
|
310
|
+
- 只想快速检查某一维度:
|
|
311
|
+
- 只查规范/跨层:直接用 `trellis-check` skill
|
|
312
|
+
- 只查 PRD 或假设:在 prompt 里指定"只做 Step 1"或"只做 Step 2"
|
|
313
|
+
|
|
314
|
+
---
|
|
315
|
+
|
|
316
|
+
## 反模式(避免)
|
|
317
|
+
|
|
318
|
+
- ❌ 不读代码,凭"应该实现了"就标记通过
|
|
319
|
+
- ❌ 只检查 happy path,忽略 PRD 提到的边界/异常场景
|
|
320
|
+
- ❌ 文案只看"意思对"就通过(必须逐字一致)
|
|
321
|
+
- ❌ 只查后端不查前端,或反之
|
|
322
|
+
- ❌ 检查报告中加入 PRD 之外的改进建议(只对照 PRD,不发挥)
|
|
323
|
+
- ❌ 发现问题直接改,不经用户确认
|
|
324
|
+
- ❌ 委派给子 agent 跑各 Step(见执行模式段)
|