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,191 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: push
|
|
3
|
+
description: "Push — 一键 commit → push → 可选 merge 到目标分支(测试线),支持多仓库,merge_target 记录在 config.yaml 中"
|
|
4
|
+
---
|
|
5
|
+
# Push — 提交并推送(可选合并到目标分支)
|
|
6
|
+
|
|
7
|
+
一键完成 commit → push → 可选 merge 到目标分支(通常是测试线)→ push 目标分支 → 切回。
|
|
8
|
+
|
|
9
|
+
支持多仓库(frontend / backend),merge 目标分支记录在 `.trellis/config.yaml` 的 `packages.<name>.merge_target` 中。
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 配置
|
|
14
|
+
|
|
15
|
+
目标分支存储在 `.trellis/config.yaml` 的 packages 配置中:
|
|
16
|
+
|
|
17
|
+
```yaml
|
|
18
|
+
packages:
|
|
19
|
+
frontend:
|
|
20
|
+
path: iqs-front-human
|
|
21
|
+
git: true
|
|
22
|
+
merge_target: test # 首次 push 时询问后自动写入
|
|
23
|
+
backend:
|
|
24
|
+
path: iqs
|
|
25
|
+
git: true
|
|
26
|
+
merge_target: test
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
> 首次运行时如果 `merge_target` 不存在,会在 merge 步骤询问目标分支并回写到 `config.yaml`。
|
|
30
|
+
> 如需修改,直接编辑 `config.yaml` 或使用 `/trellis:push --reconfigure`。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 执行步骤
|
|
35
|
+
|
|
36
|
+
### Step 0: 读取配置
|
|
37
|
+
|
|
38
|
+
读取 `.trellis/config.yaml` 中的 `packages` 配置,识别所有 `git: true` 的仓库及其 `merge_target`(如果已配置)。
|
|
39
|
+
|
|
40
|
+
### Step 1: 检测变更
|
|
41
|
+
|
|
42
|
+
读取 `.trellis/config.yaml` 中的 `packages` 配置,对每个 git 仓库检测变更:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
# 对每个 package
|
|
46
|
+
cd <package_path>
|
|
47
|
+
git status --short
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
列出有变更的仓库。如果所有仓库都没有变更,提示用户并终止。
|
|
51
|
+
|
|
52
|
+
如果只有部分仓库有变更,只处理有变更的仓库。
|
|
53
|
+
|
|
54
|
+
### Step 2: 逐仓库处理
|
|
55
|
+
|
|
56
|
+
对每个有变更的仓库,依次执行以下操作:
|
|
57
|
+
|
|
58
|
+
#### 2.1 展示变更摘要
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
cd <package_path>
|
|
62
|
+
git diff --stat
|
|
63
|
+
git diff --name-only
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
#### 2.2 暂存文件
|
|
67
|
+
|
|
68
|
+
展示要暂存的文件列表,**获得用户确认后**再暂存。
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
git add <具体文件列表>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
> **[!] 禁止使用 `git add -A` 或 `git add .`**
|
|
75
|
+
> 必须明确列出文件,避免误提交敏感文件(.env、credentials 等)。
|
|
76
|
+
|
|
77
|
+
#### 2.3 生成 commit message 并提交
|
|
78
|
+
|
|
79
|
+
分析变更内容,生成符合项目风格的 commit message:
|
|
80
|
+
- 读取最近 5 条 commit 参考风格
|
|
81
|
+
- 类型前缀:`feat` / `fix` / `chore` / `refactor` 等
|
|
82
|
+
- 简短描述变更内容
|
|
83
|
+
- 使用中文描述
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
git commit -m "<type>(<scope>): <description>"
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
#### 2.4 Push 当前分支
|
|
90
|
+
|
|
91
|
+
```bash
|
|
92
|
+
git push origin <current_branch>
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
如果远程没有该分支,使用 `-u` 建立跟踪:
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
git push -u origin <current_branch>
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### 2.5 询问是否 Merge 到目标分支(可选)
|
|
102
|
+
|
|
103
|
+
Push 完成后,检查该 package 是否已配置 `merge_target`:
|
|
104
|
+
|
|
105
|
+
**已配置 `merge_target`**:
|
|
106
|
+
|
|
107
|
+
```markdown
|
|
108
|
+
<package> 已推送到 <current_branch>。是否合并到 <merge_target>?
|
|
109
|
+
|
|
110
|
+
1. 是,合并到 <merge_target>
|
|
111
|
+
2. 否,跳过
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
**未配置 `merge_target`(首次)**:
|
|
115
|
+
|
|
116
|
+
```markdown
|
|
117
|
+
<package> 已推送到 <current_branch>。是否需要合并到其他分支(如测试线)?
|
|
118
|
+
|
|
119
|
+
1. 是,请输入目标分支名
|
|
120
|
+
2. 否,跳过
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
如果用户输入了目标分支名,**将其回写到 `.trellis/config.yaml`** 对应 package 的 `merge_target` 字段,下次自动使用。
|
|
124
|
+
|
|
125
|
+
**如果用户选择合并**:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# 切换到目标分支并拉取最新
|
|
129
|
+
git checkout <target_branch>
|
|
130
|
+
git pull origin <target_branch>
|
|
131
|
+
|
|
132
|
+
# 合并当前开发分支
|
|
133
|
+
git merge <current_branch> --no-edit
|
|
134
|
+
|
|
135
|
+
# Push 目标分支
|
|
136
|
+
git push origin <target_branch>
|
|
137
|
+
|
|
138
|
+
# 切回开发分支
|
|
139
|
+
git checkout <current_branch>
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
> **[!] 如果 merge 出现冲突:**
|
|
143
|
+
> 1. 立即停止,展示冲突文件列表
|
|
144
|
+
> 2. 询问用户:手动解决 / 中止 merge
|
|
145
|
+
> 3. **绝对不能** `git merge --abort` 后静默跳过
|
|
146
|
+
|
|
147
|
+
**如果用户选择跳过**:直接进入下一个仓库或输出结果。
|
|
148
|
+
|
|
149
|
+
### Step 3: 输出结果
|
|
150
|
+
|
|
151
|
+
```markdown
|
|
152
|
+
## Push 结果
|
|
153
|
+
|
|
154
|
+
| 仓库 | 分支 | 目标 | commit | 状态 |
|
|
155
|
+
|------|------|------|--------|------|
|
|
156
|
+
| frontend | v1.3 | test | abc1234 feat(...): ... | ✅ 已合并 |
|
|
157
|
+
| backend | v1.3 | test | def5678 fix(...): ... | ⏭️ 跳过合并 |
|
|
158
|
+
|
|
159
|
+
所有变更已推送到目标分支。
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## 参数
|
|
165
|
+
|
|
166
|
+
| 参数 | 说明 | 示例 |
|
|
167
|
+
|------|------|------|
|
|
168
|
+
| (无参数) | 自动检测所有有变更的仓库并处理 | `/trellis:push` |
|
|
169
|
+
| `--only <package>` | 只处理指定仓库 | `/trellis:push --only frontend` |
|
|
170
|
+
| `--reconfigure` | 重新配置目标分支 | `/trellis:push --reconfigure` |
|
|
171
|
+
| `--target <branch>` | 临时指定目标分支(不修改配置) | `/trellis:push --target hotfix` |
|
|
172
|
+
|
|
173
|
+
---
|
|
174
|
+
|
|
175
|
+
## 安全机制
|
|
176
|
+
|
|
177
|
+
1. **暂存确认** — 每个仓库暂存前展示文件列表,用户确认
|
|
178
|
+
2. **commit message 确认** — 展示生成的 message,用户可修改
|
|
179
|
+
3. **merge 冲突处理** — 冲突时暂停,不静默跳过
|
|
180
|
+
4. **不碰主分支** — 如果目标分支是 `master` / `main`,额外警告确认
|
|
181
|
+
5. **不使用 force push** — 始终使用普通 push
|
|
182
|
+
|
|
183
|
+
---
|
|
184
|
+
|
|
185
|
+
## 反模式(避免)
|
|
186
|
+
|
|
187
|
+
- ❌ `git add -A`(可能误提交敏感文件)
|
|
188
|
+
- ❌ merge 冲突后静默 abort(用户需要知道)
|
|
189
|
+
- ❌ 未经确认直接 commit(必须让用户看到 message)
|
|
190
|
+
- ❌ force push 到目标分支
|
|
191
|
+
- ❌ 在目标分支上直接开发(只 merge,不在目标分支上改代码)
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: re-implement
|
|
3
|
+
description: "二次实现 - 需求变更后重新调用 Implement Agent"
|
|
4
|
+
---
|
|
5
|
+
# 二次实现 - 需求变更后重新调用 Implement Agent
|
|
6
|
+
|
|
7
|
+
当任务实施过程中出现需求漂移或变动时,重新调用 Implement Agent 实现更新后的需求。
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## 使用场景
|
|
12
|
+
|
|
13
|
+
- 任务已通过 `/trellis:start` 完成了首次实现
|
|
14
|
+
- 实施过程中需求发生了变更或补充
|
|
15
|
+
- PRD 已更新,需要 Implement Agent 根据新需求重新实现
|
|
16
|
+
- 用户在 check 或测试阶段发现需要调整方向
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
## 前置条件
|
|
21
|
+
|
|
22
|
+
- 当前任务已激活(`.trellis/.current-task` 已设置)
|
|
23
|
+
- 任务目录下存在 `prd.md`(已更新为最新需求)
|
|
24
|
+
- 任务目录下存在 `implement.jsonl`(code-spec context 配置)
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 执行步骤
|
|
29
|
+
|
|
30
|
+
### Step 1: 确认当前任务状态 `[AI]`
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
python3 ./.trellis/scripts/get_context.py
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
确认:
|
|
37
|
+
- 当前任务存在且已激活
|
|
38
|
+
- 任务目录路径
|
|
39
|
+
|
|
40
|
+
如果没有激活的任务,提示用户先通过 `/trellis:start` 开始任务。
|
|
41
|
+
|
|
42
|
+
### Step 2: 了解变更内容 `[AI]`
|
|
43
|
+
|
|
44
|
+
读取当前 PRD 和已有代码变更,理解上下文:
|
|
45
|
+
|
|
46
|
+
1. 读取 `prd.md` 了解当前需求
|
|
47
|
+
2. 运行 `git diff --name-only` 了解已有代码变更
|
|
48
|
+
3. 询问用户:需求哪里变了?
|
|
49
|
+
|
|
50
|
+
### Step 3: 更新 PRD `[AI]`
|
|
51
|
+
|
|
52
|
+
根据用户描述的变更,更新 `prd.md`:
|
|
53
|
+
|
|
54
|
+
- 在 `## Requirements` 中标注新增/修改/删除的需求
|
|
55
|
+
- 更新 `## Acceptance Criteria`
|
|
56
|
+
- 在 `## Technical Notes` 中记录变更原因
|
|
57
|
+
|
|
58
|
+
**格式建议**(在 PRD 中追加):
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## 变更记录
|
|
62
|
+
|
|
63
|
+
### 变更 1: <变更标题> (YYYY-MM-DD)
|
|
64
|
+
- **原需求**: <原来是什么>
|
|
65
|
+
- **新需求**: <现在要什么>
|
|
66
|
+
- **原因**: <为什么要改>
|
|
67
|
+
- **影响范围**: <哪些已实现的代码需要调整>
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
### Step 4: 评估是否需要更新 Context 配置 `[AI]`
|
|
71
|
+
|
|
72
|
+
判断变更是否涉及新的模块或规范:
|
|
73
|
+
|
|
74
|
+
- 如果**不涉及新模块**:直接进入 Step 5
|
|
75
|
+
- 如果**涉及新模块**:先补充 context 配置
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
# 需要时追加 code-spec context
|
|
79
|
+
python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" implement "<新路径>" "<原因>"
|
|
80
|
+
python3 ./.trellis/scripts/task.py add-context "$TASK_DIR" check "<新路径>" "<原因>"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Step 5: 调用 Implement Agent `[AI]`
|
|
84
|
+
|
|
85
|
+
调用 Implement Agent 执行二次实现(code-spec context 由 hook 自动注入):
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
Agent(
|
|
89
|
+
subagent_type: "implement",
|
|
90
|
+
prompt: "基于更新后的 prd.md 重新实现任务。
|
|
91
|
+
|
|
92
|
+
注意:这是一次需求变更后的二次实现。
|
|
93
|
+
- 阅读 prd.md 中的「变更记录」章节,理解哪些需求发生了变化
|
|
94
|
+
- 保留已有的正确实现,只修改需要调整的部分
|
|
95
|
+
- 如果变更涉及已实现的逻辑,确保修改后不破坏原有功能
|
|
96
|
+
- 遵循所有已注入的 code-spec 规范
|
|
97
|
+
- 完成后报告修改/新增的文件列表",
|
|
98
|
+
model: "opus"
|
|
99
|
+
)
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Step 6: 调用 Check Agent `[AI]`
|
|
103
|
+
|
|
104
|
+
实现完成后,调用 Check Agent 验证(code-spec context 由 hook 自动注入):
|
|
105
|
+
|
|
106
|
+
```
|
|
107
|
+
Agent(
|
|
108
|
+
subagent_type: "check",
|
|
109
|
+
prompt: "检查所有代码变更是否符合 code-spec 规范。
|
|
110
|
+
|
|
111
|
+
重点关注:
|
|
112
|
+
- 二次实现是否正确反映了 prd.md 中的变更需求
|
|
113
|
+
- 新旧代码之间是否存在不一致
|
|
114
|
+
- 修改是否引入了回归问题
|
|
115
|
+
- 直接修复发现的问题
|
|
116
|
+
- 确保 lint 和 typecheck 通过",
|
|
117
|
+
model: "opus"
|
|
118
|
+
)
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
### Step 7: 报告结果 `[AI]`
|
|
122
|
+
|
|
123
|
+
输出二次实现的结果摘要:
|
|
124
|
+
|
|
125
|
+
```markdown
|
|
126
|
+
## 二次实现完成
|
|
127
|
+
|
|
128
|
+
### 需求变更
|
|
129
|
+
- <变更点 1>
|
|
130
|
+
- <变更点 2>
|
|
131
|
+
|
|
132
|
+
### 代码变更
|
|
133
|
+
- <修改的文件 1>: <做了什么>
|
|
134
|
+
- <修改的文件 2>: <做了什么>
|
|
135
|
+
|
|
136
|
+
### 验证状态
|
|
137
|
+
- [ ] Lint 通过
|
|
138
|
+
- [ ] Typecheck 通过
|
|
139
|
+
- [ ] Check Agent 验证通过
|
|
140
|
+
|
|
141
|
+
### 下一步
|
|
142
|
+
- 测试变更
|
|
143
|
+
- 确认无误后提交
|
|
144
|
+
- 运行 `/trellis:finish-work` 检查清单
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## 与其他命令的关系
|
|
150
|
+
|
|
151
|
+
| 命令 | 阶段 | 说明 |
|
|
152
|
+
|------|------|------|
|
|
153
|
+
| `/trellis:start` | 首次实现 | 完整流程:Research → Context → Implement → Check |
|
|
154
|
+
| `/trellis:re-implement` | 二次实现 | 需求变更后:更新 PRD → Implement → Check |
|
|
155
|
+
| `/trellis:finish-work` | 完成 | 提交前检查清单 |
|
|
156
|
+
|
|
157
|
+
---
|
|
158
|
+
|
|
159
|
+
## 核心原则
|
|
160
|
+
|
|
161
|
+
| 原则 | 说明 |
|
|
162
|
+
|------|------|
|
|
163
|
+
| **增量修改** | 保留正确的已有实现,只改变需要调整的部分 |
|
|
164
|
+
| **PRD 先行** | 先更新 PRD 再调 Implement Agent,确保上下文准确 |
|
|
165
|
+
| **Context 自动注入** | implement.jsonl + prd.md 由 hook 自动注入,无需手动传递 |
|
|
166
|
+
| **记录变更原因** | 在 PRD 变更记录中说明为什么改、改了什么 |
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: sync-prd
|
|
3
|
+
description: "同步 PRD - 代码/需求变更后回补 PRD"
|
|
4
|
+
---
|
|
5
|
+
# 同步 PRD - 代码/需求变更后回补 PRD
|
|
6
|
+
|
|
7
|
+
当你直接修改了任务相关的代码或需求,但没有同步更新任务的 `prd.md` 时,使用此命令将 PRD 与实际变更对齐。
|
|
8
|
+
|
|
9
|
+
**时机**:代码或需求已变更,但 PRD 未同步更新
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 使用场景
|
|
14
|
+
|
|
15
|
+
- 直接改了代码逻辑,但没更新 PRD 中的需求描述
|
|
16
|
+
- 用户口头调整了需求,代码已改但 PRD 仍是旧版本
|
|
17
|
+
- Code Review 后修改了实现方式,PRD 未反映
|
|
18
|
+
- 多次小修改累积后,PRD 与实际实现已出现偏差
|
|
19
|
+
- 任务完成前的最终检查,确认 PRD 是文档真实来源
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## 执行步骤
|
|
24
|
+
|
|
25
|
+
### Step 1: 确认当前任务 `[AI]`
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
python3 ./.trellis/scripts/get_context.py
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
确认:
|
|
32
|
+
- 当前有激活的任务(`.trellis/.current-task` 已设置)
|
|
33
|
+
- 任务目录路径和 PRD 文件存在
|
|
34
|
+
|
|
35
|
+
如果没有激活的任务,询问用户要同步哪个任务的 PRD。
|
|
36
|
+
|
|
37
|
+
### Step 2: 读取现有 PRD `[AI]`
|
|
38
|
+
|
|
39
|
+
读取任务目录下的 `prd.md`,理解当前文档化的需求。
|
|
40
|
+
|
|
41
|
+
### Step 3: 收集实际变更 `[AI]`
|
|
42
|
+
|
|
43
|
+
从多个来源收集实际变更信息:
|
|
44
|
+
|
|
45
|
+
**3a. 代码变更**(如有):
|
|
46
|
+
```bash
|
|
47
|
+
# 查看当前未提交的变更
|
|
48
|
+
cd srm-boot && git diff --name-only && git diff --cached --name-only
|
|
49
|
+
# 查看最近与任务相关的提交
|
|
50
|
+
cd srm-boot && git log --oneline -20
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**3b. 用户描述**:
|
|
54
|
+
- 询问用户:"相比 PRD 中记录的内容,实际做了哪些不同的变更?"
|
|
55
|
+
- 提供多选引导:
|
|
56
|
+
- 需求范围变了(增加/删减了功能点)
|
|
57
|
+
- 实现方式变了(技术方案调整)
|
|
58
|
+
- 接口/字段变了(API、数据库、DTO 等)
|
|
59
|
+
- 业务规则变了(校验逻辑、流程等)
|
|
60
|
+
- 其他
|
|
61
|
+
|
|
62
|
+
### Step 4: 对比分析 `[AI]`
|
|
63
|
+
|
|
64
|
+
将 PRD 内容与实际变更进行对比,识别差异:
|
|
65
|
+
|
|
66
|
+
```markdown
|
|
67
|
+
## PRD 偏差分析
|
|
68
|
+
|
|
69
|
+
### 新增(PRD 中没有,但实际已实现)
|
|
70
|
+
- <变更 1>
|
|
71
|
+
|
|
72
|
+
### 删除(PRD 中有,但实际未实现或已移除)
|
|
73
|
+
- <变更 2>
|
|
74
|
+
|
|
75
|
+
### 修改(PRD 描述与实际实现不一致)
|
|
76
|
+
- <变更 3>: PRD 说 X,实际是 Y
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
将分析结果展示给用户确认。
|
|
80
|
+
|
|
81
|
+
### Step 5: 更新 PRD `[AI]`
|
|
82
|
+
|
|
83
|
+
经用户确认后,更新 `prd.md`:
|
|
84
|
+
|
|
85
|
+
1. **更新主体内容**:修改 Goal、Requirements、Acceptance Criteria 等章节,使其反映实际状态
|
|
86
|
+
2. **追加变更记录**:在文末追加变更日志
|
|
87
|
+
|
|
88
|
+
**变更记录格式**:
|
|
89
|
+
|
|
90
|
+
```markdown
|
|
91
|
+
## 变更记录
|
|
92
|
+
|
|
93
|
+
### 变更 <N>: <简要描述> (YYYY-MM-DD)
|
|
94
|
+
- **变更类型**: 需求变更 / 实现调整 / 范围变更
|
|
95
|
+
- **变更内容**: <具体改了什么>
|
|
96
|
+
- **原因**: <为什么改>
|
|
97
|
+
- **PRD 同步方式**: 事后回补(代码先行)
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Step 6: 报告结果 `[AI]`
|
|
101
|
+
|
|
102
|
+
```markdown
|
|
103
|
+
## PRD 同步完成
|
|
104
|
+
|
|
105
|
+
### 偏差摘要
|
|
106
|
+
- 新增 <N> 项需求/实现
|
|
107
|
+
- 删除 <N> 项需求/实现
|
|
108
|
+
- 修改 <N> 项描述
|
|
109
|
+
|
|
110
|
+
### 更新的章节
|
|
111
|
+
- <章节 1>: <做了什么调整>
|
|
112
|
+
- <章节 2>: <做了什么调整>
|
|
113
|
+
|
|
114
|
+
### 下一步
|
|
115
|
+
- 确认 PRD 内容准确
|
|
116
|
+
- 如有后续开发,PRD 已可作为最新参考
|
|
117
|
+
- 如任务已完成,可运行 `/trellis:finish-work`
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
---
|
|
121
|
+
|
|
122
|
+
## 与其他命令的关系
|
|
123
|
+
|
|
124
|
+
| 命令 | 阶段 | 说明 |
|
|
125
|
+
|------|------|------|
|
|
126
|
+
| `/trellis:brainstorm` | 需求梳理 | PRD 从零创建,边讨论边完善 |
|
|
127
|
+
| `/trellis:re-implement` | 需求变更 | 先更新 PRD,再调 Implement Agent |
|
|
128
|
+
| `/trellis:sync-prd` | 事后回补 | 代码已改,PRD 未同步,回补文档 |
|
|
129
|
+
| `/trellis:finish-work` | 完成检查 | 提交前整体检查清单 |
|
|
130
|
+
|
|
131
|
+
```
|
|
132
|
+
典型流程:
|
|
133
|
+
PRD → 实现 → PRD 同步 # 理想流程(re-implement)
|
|
134
|
+
PRD → 实现 → 偏差 → sync-prd # 补救流程(本命令)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
---
|
|
138
|
+
|
|
139
|
+
## 核心原则
|
|
140
|
+
|
|
141
|
+
| 原则 | 说明 |
|
|
142
|
+
|------|------|
|
|
143
|
+
| **PRD 是真实来源** | PRD 应始终反映任务的最新状态,而非初始计划 |
|
|
144
|
+
| **事后回补优于不补** | 即使是事后同步,也比让 PRD 过时不管要好 |
|
|
145
|
+
| **记录变更原因** | 追加变更记录,让后续开发者理解演变过程 |
|
|
146
|
+
| **用户确认为准** | 对比分析需经用户确认后再更新,避免错误同步 |
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# 任务深度分析与细化
|
|
2
|
+
|
|
3
|
+
对 `.trellis/tasks/` 下的已有任务进行深入分析,提供全景预览、识别风险点,并通过交互式问答细化任务内容。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 使用方式
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
/trellis:analyze-task [task-slug]
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
- 如果提供了 `task-slug`,直接分析该任务
|
|
14
|
+
- 如果未提供,列出所有活跃任务让用户选择
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 执行步骤
|
|
19
|
+
|
|
20
|
+
### Step 1: 定位任务
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# 未指定任务时,列出所有活跃任务
|
|
24
|
+
python3 ./.trellis/scripts/task.py list
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
- 如果用户未指定任务,展示任务列表并用 `AskUserQuestion` 让用户选择
|
|
28
|
+
- 定位后,读取任务目录下的 `task.json` 和 `prd.md`(如果存在)
|
|
29
|
+
|
|
30
|
+
### Step 2: 上下文收集(静默执行,不问用户)
|
|
31
|
+
|
|
32
|
+
在分析之前,自动收集信息:
|
|
33
|
+
|
|
34
|
+
1. **任务文件**:读取 `task.json`、`prd.md`(如果有)
|
|
35
|
+
2. **相关代码**:如果任务涉及具体模块,快速扫描相关代码结构
|
|
36
|
+
3. **依赖任务**:检查是否有关联或依赖的任务
|
|
37
|
+
4. **历史记录**:检查 journal 中是否有该任务的相关记录
|
|
38
|
+
|
|
39
|
+
### Step 3: 输出分析报告
|
|
40
|
+
|
|
41
|
+
以下列结构输出分析报告:
|
|
42
|
+
|
|
43
|
+
```markdown
|
|
44
|
+
## 任务分析报告: <任务标题>
|
|
45
|
+
|
|
46
|
+
### 概述
|
|
47
|
+
<用 2-3 句话总结这个任务要做什么、为什么要做>
|
|
48
|
+
|
|
49
|
+
### 工作预览
|
|
50
|
+
预计需要做的事情:
|
|
51
|
+
1. <步骤 1>
|
|
52
|
+
2. <步骤 2>
|
|
53
|
+
3. ...
|
|
54
|
+
|
|
55
|
+
### 涉及范围
|
|
56
|
+
- **模块/文件**: <涉及哪些模块或文件>
|
|
57
|
+
- **影响面**: <这个变更会影响到什么>
|
|
58
|
+
- **依赖**: <需要什么前置条件>
|
|
59
|
+
|
|
60
|
+
### 风险点
|
|
61
|
+
1. <风险 1>: <说明 + 可能的后果>
|
|
62
|
+
2. <风险 2>: <说明 + 可能的后果>
|
|
63
|
+
|
|
64
|
+
### 不明确的地方
|
|
65
|
+
1. <问题 1>: <为什么这个需要澄清>
|
|
66
|
+
2. <问题 2>: <为什么这个需要澄清>
|
|
67
|
+
|
|
68
|
+
### 建议
|
|
69
|
+
- <可选的改进建议或替代方案>
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
### Step 4: 交互式反问
|
|
73
|
+
|
|
74
|
+
报告输出后,**逐个**向用户提出不明确的问题(每次只问一个)。
|
|
75
|
+
|
|
76
|
+
使用 `AskUserQuestion` 工具提问,优先提供选项:
|
|
77
|
+
|
|
78
|
+
```markdown
|
|
79
|
+
关于 <问题主题>,你倾向于哪种方式?
|
|
80
|
+
|
|
81
|
+
1. **选项 A** — <含义 + 利弊>
|
|
82
|
+
2. **选项 B** — <含义 + 利弊>
|
|
83
|
+
3. **其他** — 你来说明
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Step 5: 根据反馈更新任务
|
|
87
|
+
|
|
88
|
+
每收到一个回答后:
|
|
89
|
+
1. **立即更新** `prd.md`(如果存在)或创建新的 `prd.md`
|
|
90
|
+
2. **更新** `task.json` 中的相关字段(如优先级、描述等)
|
|
91
|
+
3. 继续下一个问题,直到所有不明确的地方都澄清
|
|
92
|
+
|
|
93
|
+
### Step 6: 输出细化结果
|
|
94
|
+
|
|
95
|
+
所有问题回答完毕后,输出最终的细化摘要:
|
|
96
|
+
|
|
97
|
+
```markdown
|
|
98
|
+
## 任务细化完成
|
|
99
|
+
|
|
100
|
+
### 变更摘要
|
|
101
|
+
- <列出 prd.md / task.json 的变更内容>
|
|
102
|
+
|
|
103
|
+
### 下一步
|
|
104
|
+
- 如果准备开发:运行 `/trellis:start` 进入开发流程
|
|
105
|
+
- 如果需要进一步讨论:继续对话
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
## 核心原则
|
|
111
|
+
|
|
112
|
+
| 原则 | 说明 |
|
|
113
|
+
|------|------|
|
|
114
|
+
| **先分析后提问** | 先展示你的分析和理解,再提问 |
|
|
115
|
+
| **每次只问一个问题** | 不要用问题列表轰炸用户 |
|
|
116
|
+
| **提供选项** | 尽量给出可选方案而非开放式问题 |
|
|
117
|
+
| **即时更新** | 每次收到回答立即更新文档 |
|
|
118
|
+
| **识别真正的风险** | 区分「可能的风险」和「确定的风险」 |
|
|
119
|
+
| **YAGNI** | 挑战不必要的复杂度,聚焦真正需要的 |
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 与其他命令的区别
|
|
124
|
+
|
|
125
|
+
| 命令 | 用途 | 输入 |
|
|
126
|
+
|------|------|------|
|
|
127
|
+
| `/trellis:brainstorm` | 从模糊想法出发,发现需求 | 用户的初始想法 |
|
|
128
|
+
| `/trellis:analyze-task` | 对已有任务深入分析和细化 | 已存在的 task |
|
|
129
|
+
| `/trellis:start` | 开始开发流程 | 明确的任务 |
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 反模式(避免)
|
|
134
|
+
|
|
135
|
+
- ❌ 直接输出一大堆问题让用户回答
|
|
136
|
+
- ❌ 不看代码就做分析(先收集上下文)
|
|
137
|
+
- ❌ 分析报告过于笼统(要具体到文件和模块)
|
|
138
|
+
- ❌ 过度细化不重要的细节
|
|
139
|
+
- ❌ 忽略跨模块影响
|