@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.
Files changed (67) hide show
  1. package/dist/configurators/workflow.d.ts.map +1 -1
  2. package/dist/configurators/workflow.js +58 -1
  3. package/dist/configurators/workflow.js.map +1 -1
  4. package/dist/constants/paths.d.ts +17 -0
  5. package/dist/constants/paths.d.ts.map +1 -1
  6. package/dist/constants/paths.js +19 -0
  7. package/dist/constants/paths.js.map +1 -1
  8. package/dist/templates/claude/commands/trellis/handoff.md +90 -387
  9. package/dist/templates/claude/commands/trellis/pick-task.md +74 -444
  10. package/dist/templates/claude/commands/trellis/update-spec.md +19 -3
  11. package/dist/templates/claude/hooks/inject-subagent-context.py +17 -101
  12. package/dist/templates/claude/hooks/ralph-loop.py +1 -0
  13. package/dist/templates/claude/hooks/session-start.py +170 -54
  14. package/dist/templates/iflow/commands/trellis/handoff.md +148 -0
  15. package/dist/templates/iflow/commands/trellis/pick-task.md +145 -0
  16. package/dist/templates/iflow/commands/trellis/update-spec.md +19 -3
  17. package/dist/templates/iflow/hooks/inject-subagent-context.py +1 -0
  18. package/dist/templates/iflow/hooks/ralph-loop.py +1 -0
  19. package/dist/templates/iflow/hooks/session-start.py +171 -0
  20. package/dist/templates/markdown/index.d.ts +9 -0
  21. package/dist/templates/markdown/index.d.ts.map +1 -1
  22. package/dist/templates/markdown/index.js +10 -0
  23. package/dist/templates/markdown/index.js.map +1 -1
  24. package/dist/templates/markdown/spec/roles/designer/index.md.txt +57 -0
  25. package/dist/templates/markdown/spec/roles/designer/mock-data-standards.md.txt +63 -0
  26. package/dist/templates/markdown/spec/roles/designer/prototype-guidelines.md.txt +49 -0
  27. package/dist/templates/markdown/spec/roles/frontend-impl/api-integration.md.txt +63 -0
  28. package/dist/templates/markdown/spec/roles/frontend-impl/index.md.txt +57 -0
  29. package/dist/templates/markdown/spec/roles/frontend-impl/prototype-to-production.md.txt +57 -0
  30. package/dist/templates/markdown/spec/roles/pm/index.md.txt +45 -0
  31. package/dist/templates/markdown/spec/roles/pm/prd-template.md.txt +64 -0
  32. package/dist/templates/markdown/spec/roles/pm/requirement-checklist.md.txt +43 -0
  33. package/dist/templates/trellis/index.d.ts +1 -0
  34. package/dist/templates/trellis/index.d.ts.map +1 -1
  35. package/dist/templates/trellis/index.js +2 -0
  36. package/dist/templates/trellis/index.js.map +1 -1
  37. package/dist/templates/trellis/scripts/add_session.py +3 -2
  38. package/dist/templates/trellis/scripts/common/cli_adapter.py +4 -4
  39. package/dist/templates/trellis/scripts/common/developer.py +4 -4
  40. package/dist/templates/trellis/scripts/common/git_context.py +7 -7
  41. package/dist/templates/trellis/scripts/common/paths.py +64 -14
  42. package/dist/templates/trellis/scripts/common/phase.py +2 -2
  43. package/dist/templates/trellis/scripts/common/registry.py +16 -16
  44. package/dist/templates/trellis/scripts/common/task_queue.py +10 -10
  45. package/dist/templates/trellis/scripts/common/task_utils.py +5 -5
  46. package/dist/templates/trellis/scripts/common/worktree.py +8 -8
  47. package/dist/templates/trellis/scripts/pool.py +214 -266
  48. package/dist/templates/trellis/scripts/task.py +3 -116
  49. package/package.json +3 -3
  50. package/dist/templates/claude/commands/trellis/before-role-work.md +0 -364
  51. package/dist/templates/trellis/VERSION +0 -1
  52. package/dist/templates/trellis/deliverables/README.md +0 -51
  53. package/dist/templates/trellis/paths.README.md +0 -277
  54. package/dist/templates/trellis/paths.yaml +0 -41
  55. package/dist/templates/trellis/pool/implementations.json +0 -5
  56. package/dist/templates/trellis/pool/prototypes.json +0 -5
  57. package/dist/templates/trellis/pool/requirements.json +0 -5
  58. package/dist/templates/trellis/scripts/common/project_paths.py +0 -189
  59. package/dist/templates/trellis/scripts/handoff_generator.py +0 -380
  60. package/dist/templates/trellis/spec/roles/designer/index.md +0 -243
  61. package/dist/templates/trellis/spec/roles/designer/mock-data-standards.md +0 -481
  62. package/dist/templates/trellis/spec/roles/designer/prototype-guidelines.md +0 -429
  63. package/dist/templates/trellis/spec/roles/frontend-impl/api-integration.md +0 -565
  64. package/dist/templates/trellis/spec/roles/frontend-impl/index.md +0 -321
  65. package/dist/templates/trellis/spec/roles/frontend-impl/state-management.md +0 -599
  66. package/dist/templates/trellis/spec/roles/pm/index.md +0 -112
  67. 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
- 完成当前任务,AI自动生成 HANDOFF.md 交接文档,并将产出加入任务池供下游消费。
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 .trellis/scripts/get_context.py
19
+ python3 ./.trellis/scripts/get_context.py
23
20
  ```
24
21
 
25
- **验证点**:
26
- - 当前任务已设置(`.trellis/.current-task`)
27
- - 任务目录存在
28
- - `task.json` 包含 `role` 字段
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
- ### Step 2: 读取任务配置
32
+ Verify that the output directory exists and contains files:
42
33
 
43
34
  ```bash
44
- cat .trellis/.current-task
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
- **默认路径映射**(如果 `.trellis/paths.yaml` 不存在):
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
- ```yaml
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
- ### Step 5: AI 生成 HANDOFF.md
43
+ Analyze all files in the output directory and generate a `HANDOFF.md` document.
131
44
 
132
- 调用 Python 脚本生成初稿:
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
- ## 🔌 API集成
222
- | 端点 | 方法 | 用途 | 位置 |
223
- |------|------|------|------|
224
- | [TODO] | POST | [TODO] | [TODO:文件:行号] |
50
+ ## Task Info
51
+ - **Feature ID**: {slug}
52
+ - **Title**: {title}
53
+ - **Completed by**: {developer}
54
+ - **Completed at**: {timestamp}
225
55
 
226
- AI应该:
227
- - 搜索代码中的 API 调用(axios, fetch)
228
- - 提取端点、方法、用途
229
- ```
56
+ ## Core Requirements
57
+ (AI-generated summary of PRD key points, 2-3 paragraphs)
230
58
 
231
- ---
232
-
233
- ### Step 6: 询问用户交接留言
234
-
235
- ```
236
- AI 提示用户:
237
- "HANDOFF 文档已生成。请查看:
59
+ ## Deliverable Files
60
+ - `prd.md` - Product requirements document
61
+ - (list all files)
238
62
 
239
- <产出目录>/HANDOFF.md
63
+ ## Key Design Points
64
+ 1. (extracted from PRD)
65
+ 2. ...
240
66
 
241
- 是否需要添加额外的交接留言?(可选)
242
- 例如:重点关注第三方登录流程、Mock 数据在 src/mocks/auth.ts"
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
- ### Step 7: 复制文件到产出目录
86
+ ## Design Notes
87
+ (AI-generated summary of design approach, 2-3 paragraphs)
258
88
 
259
- **创建产出目录**:
260
- ```bash
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
- #### PM 角色
267
- ```bash
268
- cp <task-dir>/prd.md <产出目录>/
269
- cp <task-dir>/user-stories.md <产出目录>/ # 如果存在
270
- cp <task-dir>/HANDOFF.md <产出目录>/ # 已生成
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
- #### Designer 角色
274
- ```bash
275
- # 复制所有原型代码文件(.tsx, .ts, .vue, .jsx, .js)
276
- find <task-dir> -name "*.tsx" -o -name "*.ts" | while read file; do
277
- cp "$file" <产出目录>/
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
- # 复制 HANDOFF
284
- cp <task-dir>/HANDOFF.md <产出目录>/
108
+ ## Special Notes for Downstream
109
+ - (interactions to preserve)
110
+ - (SDK dependencies)
111
+ - (form validation already implemented)
285
112
  ```
286
113
 
287
- #### Frontend 角色
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
- # 复制 HANDOFF
299
- cp <task-dir>/HANDOFF.md <产出目录>/
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 8: 加入任务池
123
+ ### Step 5: Add to Pool
305
124
 
306
- 调用 pool.py 添加到对应池子:
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 .trellis/scripts/pool.py add <pool-type> <task-data-json>
131
+ python3 ./.trellis/scripts/pool.py add <pool> <slug> "<title>" <output_dir>
310
132
  ```
311
133
 
312
- **pool-type 映射**:
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.