@jahanxu/trellis 0.4.2 → 0.5.1
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/configurators/workflow.d.ts.map +1 -1
- package/dist/configurators/workflow.js +58 -1
- package/dist/configurators/workflow.js.map +1 -1
- package/dist/constants/paths.d.ts +17 -0
- package/dist/constants/paths.d.ts.map +1 -1
- package/dist/constants/paths.js +19 -0
- package/dist/constants/paths.js.map +1 -1
- package/dist/templates/claude/commands/trellis/handoff.md +90 -387
- package/dist/templates/claude/commands/trellis/pick-task.md +74 -444
- package/dist/templates/claude/commands/trellis/update-spec.md +19 -3
- package/dist/templates/claude/hooks/inject-subagent-context.py +17 -101
- package/dist/templates/claude/hooks/ralph-loop.py +1 -0
- package/dist/templates/claude/hooks/session-start.py +170 -54
- package/dist/templates/iflow/commands/trellis/handoff.md +148 -0
- package/dist/templates/iflow/commands/trellis/pick-task.md +145 -0
- package/dist/templates/iflow/commands/trellis/update-spec.md +19 -3
- package/dist/templates/iflow/hooks/inject-subagent-context.py +1 -0
- package/dist/templates/iflow/hooks/ralph-loop.py +1 -0
- package/dist/templates/iflow/hooks/session-start.py +171 -0
- package/dist/templates/markdown/index.d.ts +9 -0
- package/dist/templates/markdown/index.d.ts.map +1 -1
- package/dist/templates/markdown/index.js +10 -0
- package/dist/templates/markdown/index.js.map +1 -1
- package/dist/templates/markdown/spec/roles/designer/index.md.txt +57 -0
- package/dist/templates/markdown/spec/roles/designer/mock-data-standards.md.txt +63 -0
- package/dist/templates/markdown/spec/roles/designer/prototype-guidelines.md.txt +49 -0
- package/dist/templates/markdown/spec/roles/frontend-impl/api-integration.md.txt +63 -0
- package/dist/templates/markdown/spec/roles/frontend-impl/index.md.txt +57 -0
- package/dist/templates/markdown/spec/roles/frontend-impl/prototype-to-production.md.txt +57 -0
- package/dist/templates/markdown/spec/roles/pm/index.md.txt +45 -0
- package/dist/templates/markdown/spec/roles/pm/prd-template.md.txt +64 -0
- package/dist/templates/markdown/spec/roles/pm/requirement-checklist.md.txt +43 -0
- package/dist/templates/trellis/index.d.ts +1 -0
- package/dist/templates/trellis/index.d.ts.map +1 -1
- package/dist/templates/trellis/index.js +2 -0
- package/dist/templates/trellis/index.js.map +1 -1
- package/dist/templates/trellis/scripts/add_session.py +3 -2
- package/dist/templates/trellis/scripts/common/cli_adapter.py +4 -4
- package/dist/templates/trellis/scripts/common/developer.py +4 -4
- package/dist/templates/trellis/scripts/common/git_context.py +7 -7
- package/dist/templates/trellis/scripts/common/paths.py +64 -14
- package/dist/templates/trellis/scripts/common/phase.py +2 -2
- package/dist/templates/trellis/scripts/common/registry.py +16 -16
- package/dist/templates/trellis/scripts/common/task_queue.py +10 -10
- package/dist/templates/trellis/scripts/common/task_utils.py +5 -5
- package/dist/templates/trellis/scripts/common/worktree.py +8 -8
- package/dist/templates/trellis/scripts/pool.py +214 -266
- package/dist/templates/trellis/scripts/task.py +3 -116
- package/package.json +3 -3
- package/dist/templates/claude/commands/trellis/before-role-work.md +0 -364
- package/dist/templates/trellis/VERSION +0 -1
- package/dist/templates/trellis/deliverables/README.md +0 -51
- package/dist/templates/trellis/paths.README.md +0 -277
- package/dist/templates/trellis/paths.yaml +0 -41
- package/dist/templates/trellis/pool/implementations.json +0 -5
- package/dist/templates/trellis/pool/prototypes.json +0 -5
- package/dist/templates/trellis/pool/requirements.json +0 -5
- package/dist/templates/trellis/scripts/common/project_paths.py +0 -189
- package/dist/templates/trellis/scripts/handoff_generator.py +0 -380
- package/dist/templates/trellis/spec/roles/designer/index.md +0 -243
- package/dist/templates/trellis/spec/roles/designer/mock-data-standards.md +0 -481
- package/dist/templates/trellis/spec/roles/designer/prototype-guidelines.md +0 -429
- package/dist/templates/trellis/spec/roles/frontend-impl/api-integration.md +0 -565
- package/dist/templates/trellis/spec/roles/frontend-impl/index.md +0 -321
- package/dist/templates/trellis/spec/roles/frontend-impl/state-management.md +0 -599
- package/dist/templates/trellis/spec/roles/pm/index.md +0 -112
- package/dist/templates/trellis/spec/roles/pm/prd-template.md +0 -124
|
@@ -1,445 +1,148 @@
|
|
|
1
|
-
# Handoff -
|
|
1
|
+
# Handoff - Complete Task and Add to Pool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Complete the current task, generate a HANDOFF.md document, and add the deliverable to the appropriate pool.
|
|
4
4
|
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Prerequisites
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
| **PM** | 完成 PRD 编写 | → requirements 池 |
|
|
12
|
-
| **Designer** | 完成原型代码 | → prototypes 池 |
|
|
13
|
-
| **Frontend** | 完成生产代码 | → implementations 池 |
|
|
9
|
+
- Must have a current task set (`.trellis/.current-task`)
|
|
10
|
+
- Task must have deliverable files in the output directory
|
|
14
11
|
|
|
15
12
|
---
|
|
16
13
|
|
|
17
|
-
##
|
|
14
|
+
## Process `[AI]`
|
|
18
15
|
|
|
19
|
-
### Step 1:
|
|
16
|
+
### Step 1: Read Current Task
|
|
20
17
|
|
|
21
18
|
```bash
|
|
22
|
-
python3
|
|
19
|
+
python3 ./.trellis/scripts/get_context.py
|
|
23
20
|
```
|
|
24
21
|
|
|
25
|
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
22
|
+
Read the task's `task.json` to get:
|
|
23
|
+
- `output_dir`: where deliverables are stored
|
|
24
|
+
- `role`: which role completed this task
|
|
25
|
+
- `title`: task title
|
|
26
|
+
- `slug`: task slug / deliverable ID
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
```
|
|
32
|
-
如果没有当前任务:
|
|
33
|
-
→ 先执行: python3 .trellis/scripts/task.py start <task-dir>
|
|
34
|
-
|
|
35
|
-
如果没有 role 字段:
|
|
36
|
-
→ 先执行: python3 .trellis/scripts/task.py set-role <task-dir> <pm|designer|frontend>
|
|
37
|
-
```
|
|
28
|
+
If no current task is set, inform the user and stop.
|
|
38
29
|
|
|
39
|
-
|
|
30
|
+
### Step 2: Check Deliverables
|
|
40
31
|
|
|
41
|
-
|
|
32
|
+
Verify that the output directory exists and contains files:
|
|
42
33
|
|
|
43
34
|
```bash
|
|
44
|
-
|
|
45
|
-
# 输出任务目录,例如:.trellis/tasks/01-21-user-login
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
基于当前任务目录,读取:
|
|
49
|
-
- `task.json` - 获取 role, id, title 等元数据
|
|
50
|
-
- `source.json` - (Designer/Frontend)获取上游产出引用
|
|
51
|
-
- `prd.md` - (所有角色)获取需求文档
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
### Step 3: 确定产出目录
|
|
56
|
-
|
|
57
|
-
**读取项目配置**:
|
|
58
|
-
|
|
59
|
-
```python
|
|
60
|
-
# 使用配置化路径(框架层与业务层分离)
|
|
61
|
-
python3 -c "
|
|
62
|
-
import sys
|
|
63
|
-
from pathlib import Path
|
|
64
|
-
sys.path.insert(0, str(Path('.trellis/scripts/common')))
|
|
65
|
-
from project_paths import get_output_dir_for_task, get_repo_root
|
|
66
|
-
|
|
67
|
-
repo_root = get_repo_root()
|
|
68
|
-
role = '<role>' # 从 task.json 读取
|
|
69
|
-
task_id = '<task-id>' # 从 task.json 读取
|
|
70
|
-
|
|
71
|
-
output_dir = get_output_dir_for_task(repo_root, role, task_id)
|
|
72
|
-
print(output_dir)
|
|
73
|
-
"
|
|
35
|
+
ls -la <output_dir>/
|
|
74
36
|
```
|
|
75
37
|
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
| Role | 默认产出目录 | 示例 |
|
|
79
|
-
|------|-------------|------|
|
|
80
|
-
| `pm` | `deliverables/requirements/{task-id}/` | `deliverables/requirements/user-login/` |
|
|
81
|
-
| `designer` | `deliverables/prototypes/{task-id}/` | `deliverables/prototypes/user-login/` |
|
|
82
|
-
| `frontend` | `deliverables/production/features/{task-id}/` | `deliverables/production/features/user-login/` |
|
|
83
|
-
|
|
84
|
-
**自定义路径**:
|
|
85
|
-
|
|
86
|
-
项目可以通过修改 `.trellis/paths.yaml` 自定义产出目录结构:
|
|
38
|
+
If empty or missing, warn the user:
|
|
39
|
+
> "The output directory `<output_dir>` appears empty. Would you like to continue anyway?"
|
|
87
40
|
|
|
88
|
-
|
|
89
|
-
deliverables_base: "outputs" # 可改为任何名称
|
|
90
|
-
role_outputs:
|
|
91
|
-
pm:
|
|
92
|
-
dir: "specs"
|
|
93
|
-
designer:
|
|
94
|
-
dir: "designs"
|
|
95
|
-
frontend:
|
|
96
|
-
dir: "code"
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
**任务ID** 从 `task.json` 的 `id` 字段读取。
|
|
100
|
-
|
|
101
|
-
---
|
|
102
|
-
|
|
103
|
-
### Step 4: 检查产出完整性
|
|
104
|
-
|
|
105
|
-
**PM 角色必需文件**:
|
|
106
|
-
- [ ] `prd.md` 存在且非空
|
|
107
|
-
- [ ] (可选)`user-stories.md`
|
|
108
|
-
|
|
109
|
-
**Designer 角色必需文件**:
|
|
110
|
-
- [ ] 至少1个 `.tsx` 或 `.vue` 文件(原型代码)
|
|
111
|
-
- [ ] 至少1个 Mock 数据文件(`mocks/` 或 `*.mock.ts`)
|
|
112
|
-
|
|
113
|
-
**Frontend 角色必需文件**:
|
|
114
|
-
- [ ] 修改了至少1个代码文件(通过 `git diff --name-only` 检查)
|
|
115
|
-
|
|
116
|
-
**如果检查失败**:
|
|
117
|
-
```
|
|
118
|
-
警告用户产出不完整,询问是否继续:
|
|
119
|
-
"⚠️ 检测到以下问题:
|
|
120
|
-
- PM: 缺少 prd.md
|
|
121
|
-
|
|
122
|
-
是否继续生成 HANDOFF?[y/N]"
|
|
123
|
-
|
|
124
|
-
如果用户选择 N,中止执行。
|
|
125
|
-
如果用户选择 y,继续但在 HANDOFF 中标注警告。
|
|
126
|
-
```
|
|
127
|
-
|
|
128
|
-
---
|
|
41
|
+
### Step 3: Generate HANDOFF.md
|
|
129
42
|
|
|
130
|
-
|
|
43
|
+
Analyze all files in the output directory and generate a `HANDOFF.md` document.
|
|
131
44
|
|
|
132
|
-
|
|
45
|
+
**For PM role (requirements pool):**
|
|
133
46
|
|
|
134
|
-
```bash
|
|
135
|
-
python3 .trellis/scripts/handoff_generator.py \
|
|
136
|
-
<task-dir> \
|
|
137
|
-
<role> \
|
|
138
|
-
--output <产出目录>/HANDOFF.md
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
**脚本输出**:
|
|
142
|
-
- 基于角色模板生成的 HANDOFF.md
|
|
143
|
-
- 包含 TODO 标记需要 AI 补充的部分
|
|
144
|
-
|
|
145
|
-
**AI 任务**:
|
|
146
|
-
1. 读取生成的 HANDOFF.md
|
|
147
|
-
2. 分析任务目录中的文件(prd.md, 代码文件等)
|
|
148
|
-
3. 替换所有 `[TODO: AI填写...]` 标记为实际内容
|
|
149
|
-
|
|
150
|
-
**AI 补充内容指南**:
|
|
151
|
-
|
|
152
|
-
#### PM 角色 HANDOFF
|
|
153
|
-
```markdown
|
|
154
|
-
## 🎯 核心需求
|
|
155
|
-
[TODO: AI根据PRD总结核心要点(2-3段)]
|
|
156
|
-
|
|
157
|
-
→ AI应该:
|
|
158
|
-
- 阅读 prd.md
|
|
159
|
-
- 提炼最重要的2-3个功能点
|
|
160
|
-
- 用简洁的语言(每段50-100字)总结
|
|
161
|
-
|
|
162
|
-
## 🔑 关键设计要点
|
|
163
|
-
1. [TODO: AI填写关键功能点1]
|
|
164
|
-
2. [TODO: AI填写关键功能点2]
|
|
165
|
-
|
|
166
|
-
→ AI应该:
|
|
167
|
-
- 从 PRD 中提取 Designer 需要重点关注的 UI/交互要求
|
|
168
|
-
- 例如:"支持邮箱+密码登录"、"第三方登录按钮布局参考设计稿"
|
|
169
|
-
|
|
170
|
-
## ⚠️ 特别注意事项
|
|
171
|
-
- [TODO: AI填写注意事项1 - 如UI布局要求]
|
|
172
|
-
|
|
173
|
-
→ AI应该:
|
|
174
|
-
- 提取技术限制、兼容性要求、时间节点等
|
|
175
|
-
- 例如:"支持 IE11"、"密码输入框需要显示/隐藏切换"
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
#### Designer 角色 HANDOFF
|
|
179
|
-
```markdown
|
|
180
|
-
## 🎨 设计说明
|
|
181
|
-
[TODO: AI总结设计思路(2-3段)]
|
|
182
|
-
|
|
183
|
-
→ AI应该:
|
|
184
|
-
- 阅读原型代码文件
|
|
185
|
-
- 总结布局结构、主要组件、交互流程
|
|
186
|
-
|
|
187
|
-
## 🧩 组件结构
|
|
188
|
-
[TODO: AI绘制组件树]
|
|
189
|
-
|
|
190
|
-
→ AI应该:
|
|
191
|
-
- 分析代码文件依赖关系
|
|
192
|
-
- 绘制组件树(Markdown 文本格式)
|
|
193
|
-
|
|
194
|
-
## 💾 Mock数据说明
|
|
195
|
-
[TODO: AI填写Mock数据示例]
|
|
196
|
-
|
|
197
|
-
→ AI应该:
|
|
198
|
-
- 搜索 `*.mock.ts` 或 `mocks/` 目录
|
|
199
|
-
- 提取关键 Mock 数据结构
|
|
200
|
-
- 标注文件位置和行号
|
|
201
|
-
|
|
202
|
-
## 🔄 需要Frontend补充的逻辑
|
|
203
|
-
1. **API集成** - 替换Mock为真实API调用
|
|
204
|
-
- 位置: [TODO: 文件名:行号]
|
|
205
|
-
|
|
206
|
-
→ AI应该:
|
|
207
|
-
- 搜索代码中的 `TODO` 或 `MOCK` 注释
|
|
208
|
-
- 或搜索包含 `setTimeout`、`Promise.resolve` 的 Mock 实现
|
|
209
|
-
- 列出每个需要替换的位置
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
#### Frontend 角色 HANDOFF
|
|
213
47
|
```markdown
|
|
214
|
-
|
|
215
|
-
[TODO: AI总结实现要点(2-3段)]
|
|
216
|
-
|
|
217
|
-
→ AI应该:
|
|
218
|
-
- 运行 `git diff --name-only` 获取修改的文件列表
|
|
219
|
-
- 总结主要功能实现、API 集成情况
|
|
48
|
+
# {Title} - Requirements Handoff
|
|
220
49
|
|
|
221
|
-
##
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
50
|
+
## Task Info
|
|
51
|
+
- **Feature ID**: {slug}
|
|
52
|
+
- **Title**: {title}
|
|
53
|
+
- **Completed by**: {developer}
|
|
54
|
+
- **Completed at**: {timestamp}
|
|
225
55
|
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
- 提取端点、方法、用途
|
|
229
|
-
```
|
|
56
|
+
## Core Requirements
|
|
57
|
+
(AI-generated summary of PRD key points, 2-3 paragraphs)
|
|
230
58
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
```
|
|
236
|
-
AI 提示用户:
|
|
237
|
-
"HANDOFF 文档已生成。请查看:
|
|
59
|
+
## Deliverable Files
|
|
60
|
+
- `prd.md` - Product requirements document
|
|
61
|
+
- (list all files)
|
|
238
62
|
|
|
239
|
-
|
|
63
|
+
## Key Design Points
|
|
64
|
+
1. (extracted from PRD)
|
|
65
|
+
2. ...
|
|
240
66
|
|
|
241
|
-
|
|
242
|
-
|
|
67
|
+
## Special Notes for Downstream
|
|
68
|
+
- (important details the Designer should know)
|
|
69
|
+
- (constraints, edge cases, specific UI requirements)
|
|
243
70
|
|
|
244
|
-
|
|
71
|
+
## Related Resources
|
|
72
|
+
- (links if any)
|
|
245
73
|
```
|
|
246
74
|
|
|
247
|
-
|
|
248
|
-
- 追加到 HANDOFF.md 末尾:
|
|
249
|
-
```markdown
|
|
250
|
-
## 📝 交接留言
|
|
75
|
+
**For Designer role (prototypes pool):**
|
|
251
76
|
|
|
252
|
-
|
|
253
|
-
|
|
77
|
+
```markdown
|
|
78
|
+
# {Title} - Prototype Handoff
|
|
254
79
|
|
|
255
|
-
|
|
80
|
+
## Task Info
|
|
81
|
+
- **Feature ID**: {slug}
|
|
82
|
+
- **Based on**: {source requirement}
|
|
83
|
+
- **Completed by**: {developer}
|
|
84
|
+
- **Completed at**: {timestamp}
|
|
256
85
|
|
|
257
|
-
|
|
86
|
+
## Design Notes
|
|
87
|
+
(AI-generated summary of design approach, 2-3 paragraphs)
|
|
258
88
|
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
mkdir -p <产出目录>
|
|
262
|
-
```
|
|
89
|
+
## Deliverable Files
|
|
90
|
+
- (list all component files)
|
|
263
91
|
|
|
264
|
-
|
|
92
|
+
## Component Structure
|
|
93
|
+
(component tree overview)
|
|
265
94
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
95
|
+
## Mock Data Notes
|
|
96
|
+
Current mock data used:
|
|
97
|
+
```typescript
|
|
98
|
+
// Document all mock data and their locations
|
|
99
|
+
// Include file name and line numbers
|
|
271
100
|
```
|
|
272
101
|
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
done
|
|
279
|
-
|
|
280
|
-
# 复制 Mock 数据
|
|
281
|
-
cp -r <task-dir>/mocks/ <产出目录>/mocks/ # 如果存在
|
|
102
|
+
## Logic for Frontend to Implement
|
|
103
|
+
1. Replace mock login handler with real API call (file:line)
|
|
104
|
+
2. Add error handling for network failures
|
|
105
|
+
3. Implement loading state management
|
|
106
|
+
4. ...
|
|
282
107
|
|
|
283
|
-
|
|
284
|
-
|
|
108
|
+
## Special Notes for Downstream
|
|
109
|
+
- (interactions to preserve)
|
|
110
|
+
- (SDK dependencies)
|
|
111
|
+
- (form validation already implemented)
|
|
285
112
|
```
|
|
286
113
|
|
|
287
|
-
|
|
288
|
-
```bash
|
|
289
|
-
# 获取 git 修改的文件
|
|
290
|
-
git diff --name-only > /tmp/modified_files.txt
|
|
114
|
+
Write the generated HANDOFF.md to `<output_dir>/HANDOFF.md`.
|
|
291
115
|
|
|
292
|
-
|
|
293
|
-
while read file; do
|
|
294
|
-
mkdir -p <产出目录>/$(dirname "$file")
|
|
295
|
-
cp "$file" <产出目录>/"$file"
|
|
296
|
-
done < /tmp/modified_files.txt
|
|
116
|
+
### Step 4: Ask for Handoff Message (Optional)
|
|
297
117
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
```
|
|
118
|
+
Ask the user:
|
|
119
|
+
> "Any additional notes for the downstream role? (Press Enter to skip)"
|
|
301
120
|
|
|
302
|
-
|
|
121
|
+
If provided, append to the Special Notes section.
|
|
303
122
|
|
|
304
|
-
### Step
|
|
123
|
+
### Step 5: Add to Pool
|
|
305
124
|
|
|
306
|
-
|
|
125
|
+
Determine the target pool based on role:
|
|
126
|
+
- `pm` -> `requirements`
|
|
127
|
+
- `designer` -> `prototypes`
|
|
128
|
+
- `frontend-impl` or `frontend` -> `implementations`
|
|
307
129
|
|
|
308
130
|
```bash
|
|
309
|
-
python3
|
|
131
|
+
python3 ./.trellis/scripts/pool.py add <pool> <slug> "<title>" <output_dir>
|
|
310
132
|
```
|
|
311
133
|
|
|
312
|
-
|
|
313
|
-
- `pm` → `requirements`
|
|
314
|
-
- `designer` → `prototypes`
|
|
315
|
-
- `frontend` → `implementations`
|
|
316
|
-
|
|
317
|
-
**task-data-json 格式**:
|
|
318
|
-
```json
|
|
319
|
-
{
|
|
320
|
-
"id": "<task-id>",
|
|
321
|
-
"title": "<task-title>",
|
|
322
|
-
"path": "<产出目录相对路径>",
|
|
323
|
-
"completed_by": "<当前开发者>",
|
|
324
|
-
"handoff_doc": "<产出目录>/HANDOFF.md",
|
|
325
|
-
"completed_at": "<当前时间 ISO格式>"
|
|
326
|
-
}
|
|
327
|
-
```
|
|
134
|
+
### Step 6: Report
|
|
328
135
|
|
|
329
|
-
|
|
330
|
-
```bash
|
|
331
|
-
python3 .trellis/scripts/get_developer.py
|
|
136
|
+
Output a summary:
|
|
332
137
|
```
|
|
138
|
+
Handoff complete!
|
|
139
|
+
- Deliverable: <slug>
|
|
140
|
+
- Pool: <pool>
|
|
141
|
+
- HANDOFF.md: <output_dir>/HANDOFF.md
|
|
142
|
+
- Status: available
|
|
333
143
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
### Step 9: 更新任务状态
|
|
337
|
-
|
|
338
|
-
**更新 task.json**:
|
|
339
|
-
```json
|
|
340
|
-
{
|
|
341
|
-
...
|
|
342
|
-
"status": "completed",
|
|
343
|
-
"completedAt": "<当前日期 YYYY-MM-DD>",
|
|
344
|
-
"output_dir": "<产出目录相对路径>"
|
|
345
|
-
}
|
|
144
|
+
Next: The downstream role can pick this up with:
|
|
145
|
+
/trellis:pick-task <pool> <slug>
|
|
346
146
|
```
|
|
347
147
|
|
|
348
|
-
|
|
349
|
-
```bash
|
|
350
|
-
python3 .trellis/scripts/task.py finish
|
|
351
|
-
```
|
|
352
|
-
|
|
353
|
-
---
|
|
354
|
-
|
|
355
|
-
### Step 10: 输出通知信息
|
|
356
|
-
|
|
357
|
-
```
|
|
358
|
-
✅ 任务交接完成!
|
|
359
|
-
|
|
360
|
-
产出目录: <产出目录>
|
|
361
|
-
HANDOFF 文档: <产出目录>/HANDOFF.md
|
|
362
|
-
已加入任务池: <pool-type>
|
|
363
|
-
|
|
364
|
-
下游可通过以下命令消费:
|
|
365
|
-
/trellis:pick-task <pool-type> <task-id>
|
|
366
|
-
|
|
367
|
-
提示:记得提醒下游角色(通过IM、邮件等)
|
|
368
|
-
```
|
|
369
|
-
|
|
370
|
-
---
|
|
371
|
-
|
|
372
|
-
## 错误处理
|
|
373
|
-
|
|
374
|
-
### 错误场景1:没有当前任务
|
|
375
|
-
```
|
|
376
|
-
Error: 没有设置当前任务
|
|
377
|
-
|
|
378
|
-
请先执行:python3 .trellis/scripts/task.py start <task-dir>
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
### 错误场景2:task.json 缺少 role 字段
|
|
382
|
-
```
|
|
383
|
-
Error: task.json 缺少 role 字段
|
|
384
|
-
|
|
385
|
-
请先执行:python3 .trellis/scripts/task.py set-role <task-dir> <pm|designer|frontend>
|
|
386
|
-
```
|
|
387
|
-
|
|
388
|
-
### 错误场景3:产出目录已存在
|
|
389
|
-
```
|
|
390
|
-
Warning: 产出目录已存在:<产出目录>
|
|
391
|
-
|
|
392
|
-
是否覆盖?[y/N]
|
|
393
|
-
```
|
|
394
|
-
|
|
395
|
-
### 错误场景4:HANDOFF 生成失败
|
|
396
|
-
```
|
|
397
|
-
Error: HANDOFF 文档生成失败
|
|
398
|
-
|
|
399
|
-
可能原因:
|
|
400
|
-
- task.json 格式错误
|
|
401
|
-
- Python 脚本路径错误
|
|
402
|
-
|
|
403
|
-
请检查并重试,或手动创建 HANDOFF.md
|
|
404
|
-
```
|
|
405
|
-
|
|
406
|
-
---
|
|
407
|
-
|
|
408
|
-
## 示例执行流程
|
|
409
|
-
|
|
410
|
-
### PM 完成 PRD 后交接
|
|
411
|
-
|
|
412
|
-
```bash
|
|
413
|
-
# 用户执行命令
|
|
414
|
-
/trellis:handoff
|
|
415
|
-
|
|
416
|
-
# AI 执行流程
|
|
417
|
-
1. 读取当前任务:.trellis/tasks/01-21-user-login
|
|
418
|
-
2. 读取 task.json:role=pm, id=user-login
|
|
419
|
-
3. 确定产出目录:deliverables/requirements/user-login/
|
|
420
|
-
4. 检查文件:prd.md ✅
|
|
421
|
-
5. 生成 HANDOFF.md(AI 补充核心要点)
|
|
422
|
-
6. 询问交接留言:用户输入"重点关注第三方登录流程"
|
|
423
|
-
7. 复制文件:prd.md, HANDOFF.md → deliverables/requirements/user-login/
|
|
424
|
-
8. 加入池子:pool.py add requirements {...}
|
|
425
|
-
9. 更新状态:task.json status=completed
|
|
426
|
-
10. 输出通知:✅ 已加入 requirements 池,Designer 可消费
|
|
427
|
-
```
|
|
428
|
-
|
|
429
|
-
---
|
|
430
|
-
|
|
431
|
-
## 注意事项
|
|
432
|
-
|
|
433
|
-
1. **HANDOFF 质量**:AI 补充的内容应该准确、简洁、有用
|
|
434
|
-
2. **文件完整性**:确保复制所有必要文件到产出目录
|
|
435
|
-
3. **任务池状态**:成功加入池子后,任务状态应为 `available`
|
|
436
|
-
4. **交接通知**:提醒用户通知下游角色(命令只更新池子,不发送通知)
|
|
437
|
-
|
|
438
|
-
---
|
|
439
|
-
|
|
440
|
-
## 命令别名(可选)
|
|
441
|
-
|
|
442
|
-
用户可能使用以下变体,AI 应识别并执行相同逻辑:
|
|
443
|
-
- `/trellis:handoff`
|
|
444
|
-
- `/handoff`
|
|
445
|
-
- "完成任务并交接"
|
|
148
|
+
Remind the user to commit and push so the downstream role can access the deliverables.
|