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.
Files changed (94) hide show
  1. package/README.md +113 -0
  2. package/bin/flower-trellis.js +4 -0
  3. package/enhancements/0.5/.agents/skills/trellis-analyze-task/SKILL.md +142 -0
  4. package/enhancements/0.5/.agents/skills/trellis-check-all/SKILL.md +324 -0
  5. package/enhancements/0.5/.agents/skills/trellis-create-command/SKILL.md +258 -0
  6. package/enhancements/0.5/.agents/skills/trellis-create-prd/SKILL.md +197 -0
  7. package/enhancements/0.5/.agents/skills/trellis-draw-uml/SKILL.md +148 -0
  8. package/enhancements/0.5/.agents/skills/trellis-migrate-skill/SKILL.md +216 -0
  9. package/enhancements/0.5/.agents/skills/trellis-plan-version/SKILL.md +140 -0
  10. package/enhancements/0.5/.agents/skills/trellis-push/SKILL.md +240 -0
  11. package/enhancements/0.5/.agents/skills/trellis-re-implement/SKILL.md +166 -0
  12. package/enhancements/0.5/.agents/skills/trellis-route/SKILL.md +159 -0
  13. package/enhancements/0.5/.agents/skills/trellis-run-full-chain/SKILL.md +402 -0
  14. package/enhancements/0.5/.agents/skills/trellis-sync-prd/SKILL.md +150 -0
  15. package/enhancements/0.5/.agents/skills/trellis-verify-prd/SKILL.md +217 -0
  16. package/enhancements/0.5/.claude/skills/trellis-analyze-task/SKILL.md +142 -0
  17. package/enhancements/0.5/.claude/skills/trellis-check-all/SKILL.md +324 -0
  18. package/enhancements/0.5/.claude/skills/trellis-create-command/SKILL.md +258 -0
  19. package/enhancements/0.5/.claude/skills/trellis-create-prd/SKILL.md +197 -0
  20. package/enhancements/0.5/.claude/skills/trellis-draw-uml/SKILL.md +148 -0
  21. package/enhancements/0.5/.claude/skills/trellis-migrate-skill/SKILL.md +216 -0
  22. package/enhancements/0.5/.claude/skills/trellis-plan-version/SKILL.md +140 -0
  23. package/enhancements/0.5/.claude/skills/trellis-push/SKILL.md +240 -0
  24. package/enhancements/0.5/.claude/skills/trellis-re-implement/SKILL.md +166 -0
  25. package/enhancements/0.5/.claude/skills/trellis-route/SKILL.md +159 -0
  26. package/enhancements/0.5/.claude/skills/trellis-run-full-chain/SKILL.md +402 -0
  27. package/enhancements/0.5/.claude/skills/trellis-sync-prd/SKILL.md +150 -0
  28. package/enhancements/0.5/.claude/skills/trellis-verify-prd/SKILL.md +217 -0
  29. package/enhancements/0.5/overrides/trellis-route.md +52 -0
  30. package/enhancements/0.6/.agents/skills/trellis-check-all/SKILL.md +342 -0
  31. package/enhancements/0.6/.agents/skills/trellis-create-command/SKILL.md +293 -0
  32. package/enhancements/0.6/.agents/skills/trellis-draw-uml/SKILL.md +148 -0
  33. package/enhancements/0.6/.agents/skills/trellis-extract-prd/SKILL.md +197 -0
  34. package/enhancements/0.6/.agents/skills/trellis-plan-version/SKILL.md +140 -0
  35. package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +316 -0
  36. package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +159 -0
  37. package/enhancements/0.6/.agents/skills/trellis-run-full-chain/SKILL.md +402 -0
  38. package/enhancements/0.6/.agents/skills/trellis-verify-task/SKILL.md +360 -0
  39. package/enhancements/0.6/.claude/skills/trellis-check-all/SKILL.md +342 -0
  40. package/enhancements/0.6/.claude/skills/trellis-create-command/SKILL.md +293 -0
  41. package/enhancements/0.6/.claude/skills/trellis-draw-uml/SKILL.md +148 -0
  42. package/enhancements/0.6/.claude/skills/trellis-extract-prd/SKILL.md +197 -0
  43. package/enhancements/0.6/.claude/skills/trellis-plan-version/SKILL.md +140 -0
  44. package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +316 -0
  45. package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +159 -0
  46. package/enhancements/0.6/.claude/skills/trellis-run-full-chain/SKILL.md +402 -0
  47. package/enhancements/0.6/.claude/skills/trellis-verify-task/SKILL.md +360 -0
  48. package/enhancements/0.6/overrides/workflow-states/in_progress-inline.md +5 -0
  49. package/enhancements/0.6/overrides/workflow-states/in_progress.md +7 -0
  50. package/enhancements/0.6/overrides/workflow-states/no_task.md +6 -0
  51. package/enhancements/0.6/overrides/workflow-states/planning.md +6 -0
  52. package/enhancements/0.6/overrides/workflow.md +53 -0
  53. package/enhancements/MANIFEST.json +109 -0
  54. package/enhancements/old/.agents/skills/analyze-task/SKILL.md +143 -0
  55. package/enhancements/old/.agents/skills/check-all/SKILL.md +128 -0
  56. package/enhancements/old/.agents/skills/check-impl/SKILL.md +159 -0
  57. package/enhancements/old/.agents/skills/check-prd/SKILL.md +219 -0
  58. package/enhancements/old/.agents/skills/check-prd-impl/SKILL.md +190 -0
  59. package/enhancements/old/.agents/skills/create-prd/SKILL.md +154 -0
  60. package/enhancements/old/.agents/skills/draw-uml/SKILL.md +148 -0
  61. package/enhancements/old/.agents/skills/plan-version/SKILL.md +140 -0
  62. package/enhancements/old/.agents/skills/push/SKILL.md +191 -0
  63. package/enhancements/old/.agents/skills/re-implement/SKILL.md +166 -0
  64. package/enhancements/old/.agents/skills/sync-prd/SKILL.md +146 -0
  65. package/enhancements/old/.claude/commands/trellis/analyze-task.md +139 -0
  66. package/enhancements/old/.claude/commands/trellis/check-all.md +124 -0
  67. package/enhancements/old/.claude/commands/trellis/check-impl.md +154 -0
  68. package/enhancements/old/.claude/commands/trellis/check-prd-impl.md +186 -0
  69. package/enhancements/old/.claude/commands/trellis/check-prd.md +215 -0
  70. package/enhancements/old/.claude/commands/trellis/create-prd.md +150 -0
  71. package/enhancements/old/.claude/commands/trellis/draw-uml.md +144 -0
  72. package/enhancements/old/.claude/commands/trellis/plan-version.md +136 -0
  73. package/enhancements/old/.claude/commands/trellis/push.md +187 -0
  74. package/enhancements/old/.claude/commands/trellis/re-implement.md +162 -0
  75. package/enhancements/old/.claude/commands/trellis/sync-prd.md +142 -0
  76. package/package.json +39 -0
  77. package/src/cli.js +151 -0
  78. package/src/commands/init.js +66 -0
  79. package/src/commands/uninstall.js +85 -0
  80. package/src/commands/update.js +42 -0
  81. package/src/constants.js +50 -0
  82. package/src/lib/apply-enhancements.js +133 -0
  83. package/src/lib/banner.js +45 -0
  84. package/src/lib/codex-tweaks.js +112 -0
  85. package/src/lib/copy-skills.js +91 -0
  86. package/src/lib/fs-utils.js +60 -0
  87. package/src/lib/legacy-blocks.js +70 -0
  88. package/src/lib/manifest.js +32 -0
  89. package/src/lib/paths.js +16 -0
  90. package/src/lib/pick-platforms.js +57 -0
  91. package/src/lib/trellis-runner.js +190 -0
  92. package/src/lib/variant.js +40 -0
  93. package/src/lib/versions.js +30 -0
  94. package/src/lib/workflow-inject.js +193 -0
@@ -0,0 +1,342 @@
1
+ ---
2
+ name: trellis-check-all
3
+ description: "Full pre-commit/PR review in 3 steps: spec-trio implementation correctness (code ↔ prd.md / design.md / implement.md when present) → 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.md`(必读)+ `design.md` / `implement.md`(若存在) |
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`(必读,没有则跳过 Step 1 从 Step 2 开始)、`design.md`(若存在)、`implement.md`(若存在)。三件套由 trellis 的 session hook 自动加载,或手动确认任务目录。
46
+
47
+ > **Lightweight 任务**:通常只有 `prd.md`,Step 1 内的 Design / Implement 维度自动跳过
48
+ > **Complex 任务**:三件套齐全,Step 1 对照矩阵覆盖三层(行为 / 契约 / 执行清单)
49
+
50
+ ---
51
+
52
+ ## Step 1: 对照规划三件套检查实现
53
+
54
+ **重点**:三件套(PRD / Design / Implement)中的每条规划是否都正确实现了?有没有行为偏差、契约不一致、执行清单漏落地?
55
+
56
+ ### 1.1 核心原则(不可违反)
57
+
58
+ 1. **规划三件套都是验收依据** — PRD 的 Requirement / AC 是**行为基线**;Design(若存在)的 API 契约、数据模型、数据流、rollback 设计是**技术基线**;Implement(若存在)的有序步骤是**落地基线**。三层都要在代码中找到对应实现,找不到即为缺失
59
+ 2. **逐条追踪,不跳不漏** — 不能只看 happy path,PRD 中提到的边界条件、异常处理、空值场景都要追踪
60
+ 3. **读代码,不猜代码** — 必须实际读到实现代码,不能因为"应该写了"就标记通过
61
+ 4. **文案逐字比对** — PRD 中的 UI 文案(按钮、提示语、Toast、弹窗、表头、placeholder)必须与代码中的字面值**完全一致**
62
+ 5. **只报事实,不加发挥** — 报告中只陈述 PRD 要求 vs 代码实现的差异,不要加入 PRD 之外的建议
63
+
64
+ ### 1.2 分解三件套为可验证条目
65
+
66
+ 按优先级提取以下条目(design / implement 维度仅在对应文件存在时启用):
67
+
68
+ **来自 `prd.md`(总是启用)**:
69
+ 1. **Acceptance Criteria** — 最直接的验证条目
70
+ 2. **Requirements** — 每条需求对应的行为
71
+ 3. **业务规则** — 条件判断、计算逻辑、状态流转
72
+ 4. **UI 文案** — 所有用户可见文字
73
+ 5. **边界/异常场景** — 空值处理、上限、错误提示等
74
+
75
+ **来自 `design.md`(complex 任务启用)**:
76
+
77
+ 6. **Design 契约** — API 路径 / 方法 / 入参 / 出参、数据模型字段名+类型+约束、数据流路径、关键 tradeoff 决策、rollout / rollback 设计
78
+
79
+ **来自 `implement.md`(complex 任务启用)**:
80
+
81
+ 7. **Implement 执行清单** — 每个有序步骤是否落地、validation commands 的前置条件是否满足(**静态检查**;真跑命令归 Step 3 的 trellis-check 或用户执行)、review gates 是否到位、rollback points 是否实际可用
82
+
83
+ 每条记录格式:`[条目ID] <三件套原文摘要> — 来源:<prd / design / implement 中位置>`
84
+
85
+ ### 1.3 逐条追踪代码实现
86
+
87
+ 根据条目类型定位实现:
88
+
89
+ | 条目类型 | 搜索方法 |
90
+ |---------|---------|
91
+ | API 接口行为 | Controller → Service → DAO,追踪完整链路 |
92
+ | 前端交互行为 | 组件文件,事件处理、状态管理 |
93
+ | 数据校验规则 | 前端 rules + 后端 validator/service,两端都查 |
94
+ | UI 文案 | grep 关键字,前端代码精确匹配 |
95
+ | 计算/转换逻辑 | service 层,读具体算法 |
96
+ | 状态流转 | 状态枚举 + 转换条件代码 |
97
+ | Design 契约(API / schema) | 实际 Controller / DTO / DB migration,对照路径、方法、字段名、类型、必填、默认值 |
98
+ | Implement 执行步骤 | 代码 / 配置 / 迁移脚本是否处于 implement 步骤要求的状态(如:步骤说"加索引"则验证 migration 文件存在) |
99
+
100
+ 对每条标记状态:
101
+
102
+ | 状态 | 含义 |
103
+ |------|------|
104
+ | ✅ 已实现 | 代码正确实现了 PRD 要求(已读代码确认) |
105
+ | ❌ 实现偏差 | 代码实现了,但行为与 PRD 描述不一致 |
106
+ | 🔴 未实现 | 代码中找不到对应实现 |
107
+ | ⚠️ 部分实现 | 核心逻辑有,但缺少边界/异常处理 |
108
+ | 🟡 文案不一致 | UI 文案与 PRD 不逐字一致 |
109
+
110
+ ### 1.4 重点检查场景(最容易漏)
111
+
112
+ - **条件判断** — PRD 说"当 X 时做 Y",if 条件是否完整?是否漏边界值?
113
+ - **空值/零值** — PRD 提到的字段,代码在该字段为空时是否有处理?
114
+ - **列表为空** — 列表展示是否有空状态/提示?
115
+ - **并发/时序** — 多步操作是否处理了中间状态?
116
+ - **权限控制** — PRD 提到的按钮/操作,是否加了权限判断?
117
+ - **前后端一致** — 同一条规则前后端是否都实现了?
118
+
119
+ ### 1.5 问题记录模板
120
+
121
+ 发现问题时按如下格式逐条记录(供最终汇总报告引用):
122
+
123
+ **❌ 实现偏差 / 🔴 未实现 / ⚠️ 部分实现**:
124
+
125
+ ```markdown
126
+ ##### [条目ID] <三件套原文摘要> | 来源:<prd / design / implement>
127
+ - **规划要求**:<原文>
128
+ - **实际实现**:<代码行为描述>
129
+ - **代码位置**:<文件路径:行号>
130
+ - **偏差/缺失说明**:<具体差异或缺失点>
131
+ ```
132
+
133
+ **🟡 文案不一致**(用表格汇总):
134
+
135
+ | PRD 文案 | 代码文案 | 代码位置 |
136
+ |---------|---------|---------|
137
+
138
+ > **如果发现 ❌ 实现偏差或 🔴 未实现,立即暂停**,展示问题并询问用户:
139
+ > - 先修复再继续后续检查?
140
+ > - 还是先跑完全部检查,最后统一修复?
141
+
142
+ ---
143
+
144
+ ## Step 2: 实现假设验证
145
+
146
+ **重点**:API 响应结构、组件生命周期、历史数据兼容性等假设是否正确?大多数实现 bug 不是逻辑错误,而是前提假设错了。
147
+
148
+ 根据变更类型选择适用的 Dimension 检查:
149
+
150
+ ### Dimension A: API Contract(调用了已有 API 时)
151
+
152
+ **Trigger**:前端新增/修改了对后端 API 的调用
153
+
154
+ **Checklist**:
155
+ - [ ] 读过 Controller/Handler 源码,确认实际响应结构?
156
+ - [ ] 找到项目中已有的同 API 调用代码作为参考?
157
+ - [ ] 请求参数名、类型、默认值从源码确认(非凭记忆)?
158
+ - [ ] 分页接口:确认了分页字段名和起始页码?
159
+
160
+ **典型错误假设**:
161
+
162
+ | 错误假设 | 实际情况 |
163
+ |---------|---------|
164
+ | `res.data.data` 是数组 | 实际是 `{ items: [], total }` 分页结构 |
165
+ | 参数名是 `page` | 实际是 `p`,且从 1 开始 |
166
+ | 响应直接是业务数据 | 实际包了一层 `{ success, message, data }` |
167
+
168
+ ### Dimension B: Component Context(在容器内使用组件时)
169
+
170
+ **Trigger**:在 Modal / Drawer / Tab / 条件渲染块内使用有状态组件
171
+
172
+ **Checklist**:
173
+ - [ ] 确认容器关闭/切换时是否销毁子组件?
174
+ - [ ] 如需保持状态:是否用了 keepDOM / destroyOnClose={false} 等配置?
175
+ - [ ] 受控组件的 value 与外部 state 是否正确绑定?
176
+ - [ ] 找到项目中同容器内的组件用法作为参考?
177
+
178
+ **典型错误假设**:
179
+
180
+ | 错误假设 | 实际情况 |
181
+ |---------|---------|
182
+ | Modal 关闭后表单状态保留 | 默认销毁子组件,再开状态丢失 |
183
+ | value 传了就是受控 | 某些组件需 initValue + value 配合 |
184
+ | 组件在任何地方行为一致 | 容器上下文会影响挂载/卸载行为 |
185
+
186
+ ### Dimension C: Data History(修改了数据模型时)
187
+
188
+ **Trigger**:数据库表新增/修改了字段
189
+
190
+ **Checklist**:
191
+ - [ ] 历史记录的新字段值是什么(空/零值/null)?
192
+ - [ ] 用新字段过滤时,历史数据能否被正确查到?
193
+ - [ ] 是否需要降级查询路径(如从其他表补查历史数据)?
194
+ - [ ] 写入链路中新字段的值从哪来?来源是否可靠?
195
+
196
+ **典型错误假设**:
197
+
198
+ | 错误假设 | 实际情况 |
199
+ |---------|---------|
200
+ | 加了字段就有数据 | 旧记录新字段全是零值/空值 |
201
+ | 只查聚合表就够了 | 聚合表缺维度,需从明细表降级查询 |
202
+ | 字段值肯定有 | 某些调用链路中该值可能为空 |
203
+
204
+ ### Dimension D: Data Flow Trace(跨层变更时)
205
+
206
+ **Trigger**:变更涉及 前端 ↔ API ↔ 数据库 的数据传递
207
+
208
+ **Checklist**:
209
+ - [ ] 模拟一条完整请求路径:前端发什么 → 后端收什么 → 查出什么 → 返回什么 → 前端解析什么?
210
+ - [ ] 前端参数名 === 后端 Query/Body 参数名?
211
+ - [ ] 后端返回结构 === 前端解析结构?
212
+ - [ ] 空值/零值场景:不填该字段时,每一层的行为是否正确?
213
+
214
+ **典型错误假设**:
215
+
216
+ | 错误假设 | 实际情况 |
217
+ |---------|---------|
218
+ | 代码看起来对就能跑 | 参数名差一个字母、嵌套差一层 |
219
+ | 只检查非空路径 | 空值路径才是出 bug 最多的地方 |
220
+ | 前后端分别看都没问题 | 放一起跑时数据对不上 |
221
+
222
+ ### Dimension E: Verification Tests(验证关键假设的测试)
223
+
224
+ **Trigger**:任何涉及 Dimension A-D 的变更
225
+
226
+ 光靠肉眼审查不够,关键假设必须有可运行的验证手段:
227
+
228
+ - **API Contract 验证**:写请求测试验证实际响应结构与解析匹配,覆盖 happy + 空值/零值
229
+ - **数据模型验证**:用真实数据(含历史旧记录)验证过滤/聚合结果
230
+ - **跨层数据流验证**:端到端测试完整路径,覆盖空参数、特殊字符、零值
231
+
232
+ **验证原则**:
233
+ - 不要求高覆盖率,但每个 Dimension 中发现的关键假设至少有一个测试保护
234
+ - 优先写能暴露"想当然"问题的测试,而非走过场的 happy path
235
+ - 如果无法写自动化测试,记录手动验证步骤和预期结果
236
+
237
+ **典型错误做法**:
238
+
239
+ | 错误做法 | 正确做法 |
240
+ |---------|---------|
241
+ | 只写 happy path 测试 | 优先覆盖假设最脆弱的路径 |
242
+ | 测试写了但没跑 | 测试必须实际运行并通过 |
243
+ | "这个太简单不用测" | 越简单的假设越容易错(参数名、嵌套层级) |
244
+
245
+ ### Common Issues Quick Reference(假设类 bug 速查)
246
+
247
+ | Issue | Root Cause | Prevention |
248
+ |-------|------------|------------|
249
+ | API 调用返回 undefined | 响应结构假设错误 | 读 Controller 确认 |
250
+ | 组件状态莫名丢失 | 容器销毁了子组件 | 检查容器生命周期 |
251
+ | 筛选后数据为空 | 历史记录缺字段 | 验证旧数据查询路径 |
252
+ | 参数传了但后端没收到 | 参数名不匹配 | 源码级确认参数名 |
253
+ | 看着对但跑不通 | 只做了静态审查 | 模拟完整数据流 |
254
+
255
+ > **如果发现假设错误**,同样立即暂停询问用户(先修复 or 跑完再统一修)。
256
+
257
+ ---
258
+
259
+ ## Step 3: 跨层完整性与代码规范检查
260
+
261
+ 按 `.agents/skills/trellis-check/SKILL.md` 执行。
262
+
263
+ **重点**:变更涉及的所有层、所有引用点是否都同步更新了?代码是否符合项目 spec 中的编码规范?lint 和 typecheck 是否通过?
264
+
265
+ ---
266
+
267
+ ## 输出:汇总报告
268
+
269
+ 所有检查完成后,输出一份汇总报告:
270
+
271
+ ```markdown
272
+ ## Check All 汇总报告
273
+
274
+ ### 任务: <任务名称>
275
+
276
+ ---
277
+
278
+ ### 各维度结果
279
+
280
+ | 维度 | 状态 | 问题数 | 关键问题 |
281
+ |------|------|--------|---------|
282
+ | 三件套实现 | ✅/❌ | N | <最严重的问题摘要 + 来源层> |
283
+ | 假设验证 | ✅/❌ | N | <最严重的问题摘要> |
284
+ | 跨层完整+规范 | ✅/❌ | N | <最严重的问题摘要> |
285
+
286
+ ### 问题清单(按优先级排序)
287
+
288
+ #### P0 — 功能性 BUG(来自 Step 1 / Step 2)
289
+ <PRD 实现偏差 / 🔴 未实现 / 假设错误>
290
+
291
+ #### P1 — 完整性+规范问题(来自 Step 3)
292
+ <跨层遗漏 / lint / typecheck / 规范违反>
293
+
294
+ ### 结论
295
+ - <总体评价:整体完成度>
296
+ - <建议修复顺序:P0 先修,P1 可视情况合并修>
297
+ ```
298
+
299
+ ---
300
+
301
+ ## 修复问题(需用户确认)
302
+
303
+ 如果发现问题,**先展示报告,获得用户确认后再修复**。
304
+
305
+ 修复时遵循:
306
+ - **按严重程度排序**:❌ 实现偏差 > 🔴 未实现 > ⚠️ 部分实现 > 🟡 文案不一致 > P1 完整性/规范
307
+ - **每修一条标注 PRD 条目 ID 或问题位置**
308
+ - **修复后重新验证该条目**
309
+
310
+ ---
311
+
312
+ ## 使用时机
313
+
314
+ - **开发完成后、提交前** — 作为 `trellis-finish-work` 之前的全面检查
315
+ - **Code Review 前** — 自查一遍再提交 MR
316
+ - **不确定改动质量时** — 跑一遍全量检查心里有底
317
+
318
+ ---
319
+
320
+ ## 注意事项
321
+
322
+ - 每个维度独立输出报告,最后汇总
323
+ - 如果某个维度发现严重问题(❌ / 🔴),会暂停询问是否先修复
324
+ - 如果当前任务没有 PRD,自动跳过 Step 1,从 Step 2 开始
325
+ - Step 1 对照矩阵随任务复杂度自动扩展:lightweight 仅查 prd 五类条目;complex 在场则追加 design 契约 + implement 执行清单两类条目
326
+ - 只想快速检查某一维度:
327
+ - 只查规范/跨层:直接用 `trellis-check` skill
328
+ - 只查 PRD 或假设:在 prompt 里指定"只做 Step 1"或"只做 Step 2"
329
+
330
+ ---
331
+
332
+ ## 反模式(避免)
333
+
334
+ - ❌ 不读代码,凭"应该实现了"就标记通过
335
+ - ❌ 只检查 happy path,忽略 PRD 提到的边界/异常场景
336
+ - ❌ 文案只看"意思对"就通过(必须逐字一致)
337
+ - ❌ 只查后端不查前端,或反之
338
+ - ❌ 检查报告中加入三件套之外的改进建议(只对照规划,不发挥)
339
+ - ❌ 发现问题直接改,不经用户确认
340
+ - ❌ 委派给子 agent 跑各 Step(见执行模式段)
341
+ - ❌ Complex 任务下只对照 PRD,忽略 `design.md` / `implement.md`(三层都要查)
342
+ - ❌ 把 `implement.md` 的 validation commands 真跑算到 Step 1(Step 1 是静态对照;真跑归 Step 3 或用户执行)
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: trellis-create-command
3
+ description: "Create a new trellis entry as command or skill; writes agents copy and optionally skill-garden."
4
+ ---
5
+ # Create New Trellis Entry
6
+
7
+ 创建一个新的 trellis 入口。支持两种形态:斜杠命令(command)或 Claude skill。
8
+
9
+ > **0.6 取舍提示**:skill-garden 0.6 包默认全部 skill 化,不再维护 `.claude/commands/` 目录。形态选 command 时,**只在目标项目落 2 份**,不分发到 skill-garden 0.6 包(强制分发时需手动维护,不建议)。新建入口推荐选 skill 形态。
10
+
11
+ ---
12
+
13
+ ## 前置参考:trellis-meta
14
+
15
+ > **本 skill 是流程骨架,深层架构 / 命名 / 文件分布以 `trellis-meta` 为准。**
16
+
17
+ `trellis-meta` 是 Trellis 本地架构的权威参考 skill(类似 `.trellis/spec/guides/`,但范围是 trellis 自身的架构与定制入口)。创建新入口**前**,按以下顺序加载它的 references 作为决策依据:
18
+
19
+ | 决策点 | trellis-meta 参考 |
20
+ |--------|------------------|
21
+ | skill / command / prompt / workflow 形态怎么选 | `references/platform-files/skills-and-commands.md` |
22
+ | skill / command 的目录、frontmatter、命名、hook 联动 | `references/customize-local/change-skills-or-commands.md` |
23
+ | 想加入 hook / 改 settings | `references/customize-local/change-hooks.md` + `references/platform-files/hooks-and-settings.md` |
24
+ | 想改 agent(implement / check / research)行为 | `references/customize-local/change-agents.md` + `references/platform-files/agents.md` |
25
+ | 想改 workflow phase / breadcrumb / routing | `references/customize-local/change-workflow.md` + `references/local-architecture/workflow.md` |
26
+ | 想改 task lifecycle / spec 结构 / context 注入 | `references/customize-local/change-task-lifecycle.md` / `change-spec-structure.md` / `change-context-loading.md` |
27
+ | 平台目录映射(.claude / .codex / .cursor / ...) | `references/platform-files/platform-map.md` |
28
+
29
+ **操作建议**:
30
+
31
+ 1. 在执行 Step 0 之前,先调用 `Skill({skill: "trellis-meta"})` 加载基础架构视图
32
+ 2. 根据本次要创建的入口类型,按需 `Read` 上表中对应的 references 子文档
33
+ 3. 本 SKILL.md 下面的 Step 1-8 是**操作流程**;架构 / 命名 / 边界冲突时**以 trellis-meta 为准**
34
+
35
+ > **不要凭空生成**:trellis-meta 的 references 已经把可定制入口、命名约定、目录结构、hook 注入点全列清楚,create-command 的产物必须落在这套结构内,不得发明新目录或新形态。
36
+
37
+ ---
38
+
39
+ ## 适用场景
40
+
41
+ - 给项目加一个新 trellis 工具入口
42
+ - 现有命令集不覆盖某类需求,需要扩展
43
+ - 从零设计新的工作流步骤
44
+
45
+ ---
46
+
47
+ ## 执行步骤
48
+
49
+ ### Step 0: 确定路径
50
+
51
+ **`<target>`(落地项目)**:默认 = 当前工作目录(`pwd`)。
52
+
53
+ - 若用户没有明确说"在其他项目",直接用当前项目
54
+ - 若用户明确要在其他项目创建,改用其指定的绝对路径;本 skill 不主动 `cd`,只记住该路径用于后续写入
55
+ - 若目标项目就是 skill-garden 本身(在 skill-garden 仓库里 `create-command`),`<target>` 与 `<skill-garden>` 指同一路径,**避免重复写入**(只写一次)
56
+
57
+ **`<skill-garden>`(分发源,scope 含 skill-garden 时必需)**:默认 `/root/project/skill-garden`。
58
+
59
+ - 路径不存在或与用户期望不符 → 询问用户确认
60
+ - 无需分发时(scope = 只装本项目)整段忽略
61
+
62
+ ### Step 1: 收集基本信息
63
+
64
+ 与用户确认:
65
+
66
+ | 项 | 说明 | 示例 |
67
+ |----|------|------|
68
+ | **name** | kebab-case,动词或动词短语开头 | `review-pr`、`sync-data`、`check-deps` |
69
+ | **description** | 要完成什么、产出什么 | "检查 PR 代码变更是否符合项目规范" |
70
+ | **scope** | 只装本项目 / 也装 skill-garden | 问用户:是否要分发到其他项目? |
71
+
72
+ ### Step 2: 选形态(command vs skill)
73
+
74
+ | 形态 | 何时选 | 触发方式 |
75
+ |------|--------|---------|
76
+ | **command** | 显式动作、高风险、需确认点(如 finish-work、continue) | `/trellis:<name>` |
77
+ | **skill** | 自然语可触发、查询 / 分析 / 检查、低破坏性(如 check-all、extract-prd、draw-uml) | Claude 自动路由 + `/trellis-<name>` |
78
+
79
+ 决定不了时**推荐 skill**:自然语路由更灵活,显式斜杠仍可用。反过来,后悔做成 skill 想改 command 比较费事。
80
+
81
+ **0.6 偏好**:0.6 主推 skill 化,新建入口默认 skill 形态;选 command 形态时确认是否有不可替代的"显式确认"诉求。
82
+
83
+ ### Step 3: 生成内容骨架
84
+
85
+ 按形态和复杂度生成初稿:
86
+
87
+ **简单 skill / command**(< 50 行):
88
+
89
+ ```markdown
90
+ <frontmatter 仅 skill 有>
91
+ # <标题>
92
+
93
+ <1-2 行简介>
94
+
95
+ ## 适用场景
96
+ - <触发点 1>
97
+ - <触发点 2>
98
+
99
+ ## 执行步骤
100
+ ### Step 1: <动作>
101
+ ### Step 2: <动作>
102
+
103
+ ## 反模式
104
+ - ❌ <误用 1>
105
+ - ❌ <误用 2>
106
+ ```
107
+
108
+ **复杂 skill / command**(50-300 行):
109
+
110
+ ```markdown
111
+ <frontmatter>
112
+ # <标题>
113
+
114
+ <简介>
115
+
116
+ ## 适用场景 / 前置条件
117
+
118
+ ## 执行步骤
119
+ ### Step 0-N: <动作,每步可执行,带 bash/代码示例>
120
+
121
+ ## 输出模板(必需)
122
+ <markdown 模板>
123
+
124
+ ## 核心原则
125
+ <5 条左右,每条有 why>
126
+
127
+ ## 反模式
128
+ <5-7 条具体误用>
129
+ ```
130
+
131
+ > **骨架风格参考**:读一个已有的 skill(如 `trellis-extract-prd` / `trellis-check-all` / `trellis-verify-task`)作风格锚点,保持项目内一致。
132
+
133
+ ### Step 4: Frontmatter 规则(skill 形态必需)
134
+
135
+ **skill 版 frontmatter**:
136
+
137
+ ```yaml
138
+ ---
139
+ name: trellis-<name>
140
+ description: "<what> <when> <exclusion>"
141
+ ---
142
+ ```
143
+
144
+ `description` 写法取决于**触发策略**:
145
+
146
+ | 策略 | 长度 | 写法 |
147
+ |------|------|------|
148
+ | **Auto-routing**(常用) | 80–300 字 | 三段式:What(动词开头)+ When(中英触发词)+ Exclusion("For X, use Y instead")。Claude 按此匹配用户意图自动加载 |
149
+ | **Manual-only**(偶尔用的管理工具) | 15–20 tokens | 单句动作 + 产出物。只靠用户 `/trellis-<X>` 显式触发,description 不作路由依据,节省每次对话的 skill 列表 token |
150
+
151
+ **选哪种**:
152
+ - 选 **Auto-routing** 当 skill 需要在对话中被自然语触发(如 `trellis-extract-prd`、`trellis-verify-task`、`trellis-check-all`)
153
+ - 选 **Manual-only** 当 skill 用法明确、频率低、不希望占用每次对话 skill 列表 token(如 `trellis-create-command` 自身、`trellis-plan-version`)
154
+
155
+ **agents 版 frontmatter**:正文 + frontmatter 与 skill 版完全一致(包括 `name: trellis-<name>`),只是落在 `.agents/skills/trellis-<name>/` 目录。
156
+
157
+ ```yaml
158
+ ---
159
+ name: trellis-<name>
160
+ description: "<与 skill 版一致>"
161
+ ---
162
+ ```
163
+
164
+ **command 版**:无 frontmatter,纯 markdown。
165
+
166
+ ### Step 5: 写入副本
167
+
168
+ **不变量(必须遵守)**:每个 trellis 入口都成对存在 —— `.claude/<commands 或 skills>/...` 主副本 + `.agents/skills/trellis-<name>/SKILL.md` 镜像副本。漏写任一份会破坏 skill-garden install.sh 的对称分发。scope 含 skill-garden 时,skill 形态需要在 `<skill-garden>/.trellis/0.6/` 下各写一份(共 4 份);command 形态在 0.6 中不再分发到 skill-garden(见下表注)。
169
+
170
+ 按形态决定落盘位置:
171
+
172
+ **形态 = skill**(2 份 / scope 为 skill-garden 时 4 份):
173
+
174
+ | 位置 | frontmatter name |
175
+ |------|------------------|
176
+ | `<target>/.claude/skills/trellis-<name>/SKILL.md` | `trellis-<name>`(主副本) |
177
+ | `<target>/.agents/skills/trellis-<name>/SKILL.md` | `trellis-<name>`(镜像,body + frontmatter 完全同主副本) |
178
+ | `<skill-garden>/.trellis/0.6/.claude/skills/trellis-<name>/SKILL.md` | `trellis-<name>` |
179
+ | `<skill-garden>/.trellis/0.6/.agents/skills/trellis-<name>/SKILL.md` | `trellis-<name>` |
180
+
181
+ **形态 = command**(仅 target 2 份;scope = skill-garden 也不分发到 0.6 包):
182
+
183
+ | 位置 | 格式 |
184
+ |------|------|
185
+ | `<target>/.claude/commands/trellis/<name>.md` | 无 frontmatter(主副本) |
186
+ | `<target>/.agents/skills/trellis-<name>/SKILL.md` | 带 frontmatter,`name: trellis-<name>`(镜像) |
187
+
188
+ > **0.6 不分发 command 到 skill-garden**:0.6 包目录树没有 `.claude/commands/`,install.sh 也不会处理。如果你确实希望 command 形态分发给其他项目使用,请:(a) 改用 skill 形态,或 (b) 把该 command 同时放到 0.5 包(向下兼容用户),或 (c) 在 skill-garden 包外用其他机制分发。
189
+
190
+ **同步技巧**:写完主版(`.claude/skills/trellis-<X>/SKILL.md` 或 `.claude/commands/trellis/<X>.md`)后,用 `cp` 派生其他副本:
191
+
192
+ ```bash
193
+ # 主副本写完后,副本内容完全一致,直接 cp 即可
194
+ cp <target>/.claude/skills/trellis-<X>/SKILL.md <target>/.agents/skills/trellis-<X>/SKILL.md
195
+
196
+ # 对 skill-garden 同步(仅 skill 形态、scope 为 skill-garden 时)
197
+ cp -r <target>/.claude/skills/trellis-<X> <skill-garden>/.trellis/0.6/.claude/skills/
198
+ cp -r <target>/.agents/skills/trellis-<X> <skill-garden>/.trellis/0.6/.agents/skills/
199
+ ```
200
+
201
+ ### Step 6: 更新 skill-garden README(scope = skill-garden 时)
202
+
203
+ 必改:
204
+ - "0.6+ 推荐技能" 表追加一行(名称 / 形态 / 说明 / 使用时机)
205
+ - "0.6+ 全部技能" 段同步更新计数
206
+
207
+ 可选:
208
+ - 如引入新形态约定或命名前缀:更新"新增 Trellis 技能"指引
209
+
210
+ ### Step 7: 验证
211
+
212
+ | 检查项 | 方法 |
213
+ |-------|------|
214
+ | 新 skill 出现在 Claude skill list | 读 `<available-skills>` 区,确认 `trellis-<X>` 存在且 description 完整 |
215
+ | 新 command 出现在 slash 列表 | 下拉 `/trellis:` 能看到 `<name>` |
216
+ | scope=skill-garden:install 端到端 | `rm -rf /tmp/sg-test && mkdir -p /tmp/sg-test/.trellis && echo "0.6.0-beta.8" > /tmp/sg-test/.trellis/.version && bash <skill-garden>/scripts/install.sh /tmp/sg-test <X>` |
217
+ | 副本内容一致 | `wc -l` 行数一致;关键段落 `diff` 确认 |
218
+
219
+ ### Step 8: 输出确认
220
+
221
+ ```markdown
222
+ ✓ 已创建 trellis 入口:<name>
223
+
224
+ 形态:<command | skill>
225
+ 范围:<本项目 | 本项目 + skill-garden 0.6>
226
+
227
+ 副本:
228
+ • <target>/.claude/<path>
229
+ • <target>/.agents/skills/trellis-<X>/SKILL.md
230
+ <• <skill-garden>/.trellis/0.6/ 同步位置 × 2(仅 skill 形态)>
231
+
232
+ 触发方式:
233
+ • 自然语:<触发词例子>
234
+ • 显式:<`/trellis:<X>` 或 `/trellis-<X>`>
235
+
236
+ 下一步建议:
237
+ • 在当前对话试一次触发,观察 Claude 是否正确路由
238
+ • 触发失败时调整 description(精准化 when/exclusion)
239
+ • 内容有遗漏时补充 Step 或 checklist
240
+ ```
241
+
242
+ ---
243
+
244
+ ## 命名约定
245
+
246
+ | 类型 | 前缀 | 示例 |
247
+ |------|------|------|
248
+ | 会话生命周期 | — | `continue` / `finish-work` |
249
+ | Pre-development | `before-` | `before-dev` |
250
+ | Check | `check-` | `check-all` |
251
+ | Verify | `verify-` | `verify-task` |
252
+ | Extract(有源严格提取) | `extract-` | `extract-prd` |
253
+ | Create / generate(从零创建) | `create-` | `create-command` |
254
+ | Analyze | `analyze-` | `analyze-task` |
255
+ | Sync / update | `sync-` / `update-` | `sync-prd` / `update-spec` |
256
+ | 动作类 | 动词开头 | `push` / `draw-uml` |
257
+
258
+ > **0.6 命名取舍**:「严格提取」类用 `extract-` 前缀(强调原文不动、禁止发挥);「从零创建」类才用 `create-` 前缀(如 create-command)。区分这两者能让 AI 在触发时不混淆生成 vs 提取的语义。
259
+
260
+ ### 命名反模式
261
+
262
+ - ❌ 不用 kebab-case(不要 `reviewPr` / `review_pr`)
263
+ - ❌ 名字过于笼统(`tool` / `helper` / `util`)
264
+ - ❌ 与现有命令冲突(先 `ls .claude/commands/trellis` 和 `.claude/skills/` 确认)
265
+ - ❌ skill 写文件时漏 `trellis-` 前缀(影响自动路由分组)
266
+ - ❌ "严格提取"语义的入口用 `create-` 前缀(应该用 `extract-`,避免 AI 误判为生成型)
267
+
268
+ ---
269
+
270
+ ## 内容写作约束
271
+
272
+ - skill body 默认 < 300 行;超过说明该拆分或融合
273
+ - 每个 Step 要有**具体可执行动作**(读文件、grep、写文件),避免 "Analyze the requirements" 这种模糊词
274
+ - 输出格式必须用 markdown 模板明示
275
+ - 反模式清单必写(帮 Claude 避免常见误用)
276
+ - 中文注释 + 英文 description(description 中的触发词可中英混合)
277
+ - 引用文件路径用反引号 `.claude/...`,不写裸路径
278
+
279
+ ---
280
+
281
+ ## 反模式(避免)
282
+
283
+ - ❌ 写 `.cursor/commands/`(已废弃,统一 `.claude/commands/`)
284
+ - ❌ 同时创建 command 和 skill 同名入口(触发歧义,不知选哪个)
285
+ - ❌ 只写 `.claude/...`,漏了 `.agents/skills/trellis-<X>/`(skill-garden install 会不对称)
286
+ - ❌ 选 Auto-routing 策略但 description 过短(< 80 字),Claude 路由不稳;Manual-only 策略无此要求
287
+ - ❌ description 用名词开头("A skill for...")而不是动词开头("Analyzes..." / "Extract..." / "Create...")
288
+ - ❌ 不询问 scope 直接写 skill-garden(需要用户显式确认 skill-garden 路径)
289
+ - ❌ 不参考已有 skill 就凭空生成,导致风格不一致
290
+ - ❌ 写完不验证(description 语法错或 frontmatter 缩进错,Claude 静默忽略)
291
+ - ❌ command 形态硬要分发到 skill-garden 0.6 包(0.6 不维护 commands 目录,会被忽略)
292
+ - ❌ **跳过 trellis-meta 参考、凭 SKILL.md 简版描述就开写**(trellis-meta 是本地架构权威;冲突时以它为准)
293
+ - ❌ **发明 trellis-meta 未列出的新目录 / 新形态**(如自创 `.trellis/extensions/...` 这种结构;新需求应先去 trellis-meta 找现有入口)