flower-trellis 0.6.0 → 0.6.1-beta.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 (34) hide show
  1. package/README.md +2 -2
  2. package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +6 -86
  3. package/enhancements/0.6/.agents/skills/trellis-push/references/output-templates.md +96 -0
  4. package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +6 -86
  5. package/enhancements/0.6/.claude/skills/trellis-push/references/output-templates.md +96 -0
  6. package/enhancements/0.6/overrides/bundles/control-plane-integrity.json +2 -1
  7. package/enhancements/0.6/overrides/bundles/trellis-session-insight.json +7 -0
  8. package/enhancements/0.6/overrides/compatibility.json +1 -1
  9. package/enhancements/0.6/overrides/conflicts.json +83 -1
  10. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/notice-builder-content.py +3 -0
  11. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/notice-builder-selector.py +18 -0
  12. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/notice-output-content.py +1 -0
  13. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/notice-output-selector.py +1 -0
  14. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/patch.json +60 -0
  15. package/enhancements/0.6/overrides/patches/hooks/session-start/update-boundary/update-resolver-selector.py +21 -0
  16. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/docstring-selector.py +1 -0
  17. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/helpers-selector.py +24 -7
  18. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/output-selector.py +1 -1
  19. package/enhancements/0.6/overrides/patches/scripts/session-context-update-boundary/patch.json +11 -0
  20. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-baseline.md +33 -21
  21. package/enhancements/0.6/overrides/patches/skills/trellis-meta/managed-architecture-and-ownership/platform-skill-roots-content.md +23 -28
  22. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/caveats-baseline.md +6 -0
  23. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/caveats-content.md +7 -0
  24. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/flags-baseline.md +17 -0
  25. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/flags-content.md +17 -0
  26. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/overview-content.md +1 -0
  27. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/overview-selector.md +1 -0
  28. package/enhancements/0.6/overrides/patches/skills/trellis-session-insight/grok-memory-support/patch.json +90 -0
  29. package/enhancements/MANIFEST.json +17 -2
  30. package/package.json +4 -4
  31. package/src/commands/telemetry.js +2 -0
  32. package/src/lib/banner.js +2 -27
  33. package/src/lib/developer.js +40 -0
  34. package/src/lib/telemetry.js +53 -8
package/README.md CHANGED
@@ -85,7 +85,7 @@ flower-trellis -v
85
85
 
86
86
  > 已全局安装时可直接写 `flower-trellis`、`ftl` 或 `ft`(三者等价);未安装则在命令前加 `npx`。
87
87
 
88
- 为统计安装活跃度和版本分布,CLI 默认在远程版本检查及 `init` / `update` 成功后上报随机设备 ID、Flower/Trellis 版本、项目 `.trellis/.developer` 名称和运行平台;不采集 MAC、主机名、系统用户名、项目路径或仓库地址。可用 `flower-trellis telemetry disable` 持久停用,或用 `FLOWER_NO_TELEMETRY=1` 临时停用。
88
+ 为统计安装活跃度和版本分布,CLI 默认在远程版本检查及 `init` / `update` 成功后上报随机设备 ID、Flower/Trellis 版本、开发者名称和运行平台。开发者名称优先读取项目 `.trellis/.developer`,缺失时回退到目标目录可见的 Git `user.name`,并缓存最近一次有效名称供后续上报;不采集 Git 邮箱、MAC、主机名、系统用户名、项目路径或仓库地址。可用 `flower-trellis telemetry disable` 持久停用,或用 `FLOWER_NO_TELEMETRY=1` 临时停用。
89
89
 
90
90
  ### 命令
91
91
 
@@ -350,7 +350,7 @@ flower banner → 平台多选菜单 → Trellis 原生交互(模板 / monorepo
350
350
  npm i -g flower-trellis@latest && flower-trellis update
351
351
  ```
352
352
 
353
- - **0.6 兼容门禁**:当前强化快照已登记 Trellis `0.6.12`。未登记的同一 `0.6.x` 会显示 `untested-upstream` 警告,并在完整 Patch/冲突检查通过后继续;`0.7+` / `1.x` 不会自动复用 0.6 baseline。遇到未支持的新版本时,先升级 flower-trellis,或使用 `--no-enhance` 只运行纯上游 Trellis。
353
+ - **0.6 兼容门禁**:当前强化快照已登记 Trellis `0.6.14`。未登记的同一 `0.6.x` 会显示 `untested-upstream` 警告,并在完整 Patch/冲突检查通过后继续;`0.7+` / `1.x` 不会自动复用 0.6 baseline。遇到未支持的新版本时,先升级 flower-trellis,或使用 `--no-enhance` 只运行纯上游 Trellis。
354
354
 
355
355
  - **通用技能**:`flower-trellis update` 会用新版快照覆盖仓库中已经启用的 common skill,
356
356
  未启用项不会自动安装;若某个已安装 common skill 已从新版快照移除,更新会精确删除其
@@ -126,68 +126,15 @@ auto-loop 内部 `commit-only` 也允许 retained dirty 存在,但每个生成
126
126
 
127
127
  ## Step 3:展示最小计划
128
128
 
129
- 确认前禁止 `git add`、`git commit` 或 `git push`。计划只展示:
129
+ 确认前禁止 `git add`、`git commit` 或 `git push`。
130
130
 
131
- ```markdown
132
- ## Trellis Push 计划
131
+ 普通模式或用户 `commit-only` 在所有计划数据已经收敛、即将展示用户可见计划时,必须即时读取 `references/output-templates.md` 的“计划模板”和“共用展示规则”,再按该 reference 渲染。不得在 Skill 入口、仓库发现或预检阶段提前加载该文件;每次实际计划输出都以这次即时读取为准。
133
132
 
134
- [<PUSH / PUSH · MERGE / COMMIT-ONLY>] <N> 个仓库 · <N> 个 commit · <N> 个文件 · 保留未提交 <N> · 风险 <N>
135
-
136
- - **工作**:<任务名 | `Untracked work: <work-id>` | 无活动任务>
137
- - **顺序**:<repo-a> [-> `<local generation command>`] -> <repo-b> [-> task progress]
138
-
139
- ### 完成链证据
140
- - **Check-All**:<通过 / 通过(已接受风险:CHK-001,FBK-002) / 未运行 / 已失效 / 存在未处置 findings / blocked / 部分验证>
141
- - **Update-Spec**:<no-op / written / needs-review / 未运行 / 已失效>
142
-
143
- ### 1. <repository-name>
144
-
145
- - **Message**:`<commit message>`
146
- - **分支**:`<branch>` -> `<upstream>`
147
- - **变更**:<N> 个文件 · `+<adds> -<deletes>`
148
- - **父提交**:`<pre-merge-head>` + `<merge-head>`(仅已有 merge 时显示)
149
- - **Push**:<执行 / 跳过(commit-only)>
150
-
151
- 计划提交:
152
- - <exact files 或分组摘要>
153
-
154
- [生成(多仓需要时显示):前置仓成功后,在 `<working-directory>` 运行 `<exact local command>`;预计只影响 <后续仓 exact files 或分组摘要>]
155
-
156
- ### 保留未提交的变更(dirty,仅数量大于 0 时显示)
157
- - [untracked] <path>
158
- - [unstaged] <path>
159
- - [staged] <path>
160
-
161
- ### 风险(仅数量大于 0 时显示)
162
- - <Check-All / Update-Spec 风险,或 unknown ahead / branch-upstream / attribution risk>
163
-
164
- ### 任务记录(仅普通模式且存在活动任务时显示)
165
-
166
- - **Message**:`chore(task): update <task-name> progress` · <N> 个文件
167
- - **仓库**:<repository-name> · 分支:`<branch>` -> `<upstream>`
168
- - **计划提交**:<当前任务 exact files 或分组摘要>
169
- - **进度**:completed=<...> | partial=<...> | next=<...>
170
- - **执行**:<commit -> push -> progress commit -> progress push>
171
-
172
- 确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
173
- ```
174
-
175
- 展示规则:
176
-
177
- - 计划与结果模板中的字段行必须使用 `- **字段**:值` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格换行。
178
- - 「任务记录」是与各仓库区平级的独立 `###` 小节,仅普通模式且存在活动任务时整节展示;不再用方括号条件行代替小节标题。
179
- - 单仓 `planned` 不超过 8 个文件时完整列出。
180
- - 超过 8 个时按目录归组,最多 12 行;用户要求展开时展示同一 exact set。
181
- - 顶部仓库/commit/file 总数包含独立任务记录提交所在 Git root、该提交及其 exact files;任务记录文件使用相同的 8 文件展示阈值和展开规则。
182
- - 保留未提交的变更始终逐项标注 Git 状态;真正风险在独立“风险”区逐项展示。
183
- - 完成链证据始终显示当前状态,但不重复 Check-All 报告或 Spec review 正文;`未运行`、`已失效`、任一未处置 `CHK-*` / `FBK-*`、blocked、部分验证或 `needs-review` 同时计入风险区。已接受风险的问题也必须按 ID、严重度和影响进入风险区,但不得改标为阻断 finding。
184
- - 无活动 task、untracked 或 `commit-only` 时省略进度动作。
185
- - 不重复展示检查结果、规范复核、归档或其他阶段的详细信息。
186
- - 生成前无法确定的内容和增删行写“生成后计算”,不得填预测值。
133
+ reference 缺失、无法读取或缺少对应章节时停止并报告 `阻塞`,不得凭记忆重建、缩写或自制替代模板。
187
134
 
188
135
  普通多仓只确认一次。计划已展示生成命令和预计 exact files 时,命令成功且没有出现预计列表外的新 dirty path 就沿用原确认;内容、hash 或统计变化不重问。其它计划边界变化仍按 Step 4 重新规划。
189
136
 
190
- auto-loop 内部 `commit-only` 仍生成同样的逐仓执行数据用于自检和结果记录,但不再次询问用户;它只能在当前任务 artifacts、runner owned dirty 和 protected-retained 边界内形成 exact files/message。
137
+ auto-loop 内部 `commit-only` 不渲染交互式计划或结果,也不再次询问用户,因此不得为了内部执行读取 `references/output-templates.md`。它仍生成同样的逐仓执行数据用于自检、恢复和调用方结果记录,并且只能在当前任务 artifacts、runner owned dirty 和 protected-retained 边界内形成 exact files/message。
191
138
 
192
139
  ## Step 4:精确提交与推送
193
140
 
@@ -308,36 +255,9 @@ python3 ./.trellis/scripts/task_progress.py write \
308
255
 
309
256
  untracked 的全部已确认 Git 动作成功后,最后运行 `python3 ./.trellis/scripts/untracked_flow.py clear --reason completed --work-id <work-id>`。清理成功才报告完成链已结束;任一仓库、push 或清理失败都保留状态并报告恢复位置,禁止因部分成功伪造完成。用户 `commit-only` 的已确认动作全部成功时同样可以完成并清理。
310
257
 
311
- 结果复用计划的视觉顺序,先给总览,再逐仓报告实际 commit/push,最后报告任务进度与保留 dirty:
312
-
313
- ```markdown
314
- ## Trellis Push 结果
315
-
316
- [完成 / 部分完成 / 失败] <N> 个仓库 · <N> 个业务 commit
317
-
318
- ### 1. <repository-name>
319
-
320
- - **Commit**:`<short-hash> <actual commit message>`
321
- - **分支**:`<branch>` -> `<upstream>`
322
- - **状态**:<✓ 已推送 / · 仅本地提交 / ❌ 失败>
323
- - **生成**:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>(仅多仓需要时显示)
324
-
325
- ### 任务进度
326
-
327
- - **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
328
- - **记录**:<N> 个当前任务文件
329
- - **进度**:completed=<...> | partial=<...> | next=<...>
330
- - **失败原因**:<原因和恢复动作>(仅失败时显示)
331
-
332
- ### 保留未提交的变更(dirty,仅存在时显示)
333
- - [untracked] <path>
334
- - [unstaged] <path>
335
- - [staged] <path>
336
- ```
337
-
338
- untracked 结果用“无任务状态”替代“任务进度”,展示 work id 与 `<已清理/保留待恢复>`;不生成或暗示 task progress commit。
258
+ 普通模式、用户 `commit-only` 或 untracked 路径在即将展示用户可见结果时,必须再次即时读取 `references/output-templates.md` 的“共用展示规则”、“结果模板”和“结果补充规则”,再按该 reference 渲染。不得依赖 Step 3 曾经读取的模板仍在上下文中。
339
259
 
340
- 部分完成时必须明确列出已成功仓库、失败仓库/步骤、当前分支和下一恢复动作。业务结果与 progress sync 状态不得合并成一个模糊结论。
260
+ reference 缺失、无法读取或缺少对应章节时停止并报告 `阻塞`,不得凭记忆重建、缩写或自制替代结果。auto-loop 内部 `commit-only` 不读取或渲染该交互式结果模板,只按 Step 4 的失败保留契约向调用方返回逐仓 commits、files、retained、message 和失败位置,由 `trellis-auto-loop` 完成 `record + next`。
341
261
 
342
262
  ## 禁止事项
343
263
 
@@ -0,0 +1,96 @@
1
+ # Trellis Push 输出模板
2
+
3
+ 本 reference 只定义用户可见的计划、结果和展示规则。何时读取、是否确认、能否执行以及失败恢复均由同目录 `SKILL.md` 所有。
4
+
5
+ ## 计划模板
6
+
7
+ ```markdown
8
+ ## Trellis Push 计划
9
+
10
+ [<PUSH / PUSH · MERGE / COMMIT-ONLY>] <N> 个仓库 · <N> 个 commit · <N> 个文件 · 保留未提交 <N> · 风险 <N>
11
+
12
+ - **工作**:<任务名 | `Untracked work: <work-id>` | 无活动任务>
13
+ - **顺序**:<repo-a> [-> `<local generation command>`] -> <repo-b> [-> task progress]
14
+
15
+ ### 完成链证据
16
+ - **Check-All**:<通过 / 通过(已接受风险:CHK-001,FBK-002) / 未运行 / 已失效 / 存在未处置 findings / blocked / 部分验证>
17
+ - **Update-Spec**:<no-op / written / needs-review / 未运行 / 已失效>
18
+
19
+ ### 1. <repository-name>
20
+
21
+ - **Message**:`<commit message>`
22
+ - **分支**:`<branch>` -> `<upstream>`
23
+ - **变更**:<N> 个文件 · `+<adds> -<deletes>`
24
+ - **父提交**:`<pre-merge-head>` + `<merge-head>`(仅已有 merge 时显示)
25
+ - **Push**:<执行 / 跳过(commit-only)>
26
+
27
+ 计划提交:
28
+ - <exact files 或分组摘要>
29
+
30
+ [生成(多仓需要时显示):前置仓成功后,在 `<working-directory>` 运行 `<exact local command>`;预计只影响 <后续仓 exact files 或分组摘要>]
31
+
32
+ ### 保留未提交的变更(dirty,仅数量大于 0 时显示)
33
+ - [untracked] <path>
34
+ - [unstaged] <path>
35
+ - [staged] <path>
36
+
37
+ ### 风险(仅数量大于 0 时显示)
38
+ - <Check-All / Update-Spec 风险,或 unknown ahead / branch-upstream / attribution risk>
39
+
40
+ ### 任务记录(仅普通模式且存在活动任务时显示)
41
+
42
+ - **Message**:`chore(task): update <task-name> progress` · <N> 个文件
43
+ - **仓库**:<repository-name> · 分支:`<branch>` -> `<upstream>`
44
+ - **计划提交**:<当前任务 exact files 或分组摘要>
45
+ - **进度**:completed=<...> | partial=<...> | next=<...>
46
+ - **执行**:<commit -> push -> progress commit -> progress push>
47
+
48
+ 确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
49
+ ```
50
+
51
+ ## 共用展示规则
52
+
53
+ - 计划与结果模板中的字段行必须使用 `- **字段**:值` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格换行。
54
+ - 「任务记录」是与各仓库区平级的独立 `###` 小节,仅普通模式且存在活动任务时整节展示;不再用方括号条件行代替小节标题。
55
+ - 单仓 `planned` 不超过 8 个文件时完整列出。
56
+ - 超过 8 个时按目录归组,最多 12 行;用户要求展开时展示同一 exact set。
57
+ - 顶部仓库/commit/file 总数包含独立任务记录提交所在 Git root、该提交及其 exact files;任务记录文件使用相同的 8 文件展示阈值和展开规则。
58
+ - 保留未提交的变更始终逐项标注 Git 状态;真正风险在独立“风险”区逐项展示。
59
+ - 完成链证据始终显示当前状态,但不重复 Check-All 报告或 Spec review 正文;`未运行`、`已失效`、任一未处置 `CHK-*` / `FBK-*`、blocked、部分验证或 `needs-review` 同时计入风险区。已接受风险的问题也必须按 ID、严重度和影响进入风险区,但不得改标为阻断 finding。
60
+ - 无活动 task、untracked 或 `commit-only` 时省略进度动作。
61
+ - 不重复展示检查结果、规范复核、归档或其他阶段的详细信息。
62
+ - 生成前无法确定的内容和增删行写“生成后计算”,不得填预测值。
63
+
64
+ ## 结果模板
65
+
66
+ 结果复用计划的视觉顺序,先给总览,再逐仓报告实际 commit/push,最后报告任务进度与保留 dirty:
67
+
68
+ ```markdown
69
+ ## Trellis Push 结果
70
+
71
+ [完成 / 部分完成 / 失败] <N> 个仓库 · <N> 个业务 commit
72
+
73
+ ### 1. <repository-name>
74
+
75
+ - **Commit**:`<short-hash> <actual commit message>`
76
+ - **分支**:`<branch>` -> `<upstream>`
77
+ - **状态**:<✓ 已推送 / · 仅本地提交 / ❌ 失败>
78
+ - **生成**:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>(仅多仓需要时显示)
79
+
80
+ ### 任务进度
81
+
82
+ - **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
83
+ - **记录**:<N> 个当前任务文件
84
+ - **进度**:completed=<...> | partial=<...> | next=<...>
85
+ - **失败原因**:<原因和恢复动作>(仅失败时显示)
86
+
87
+ ### 保留未提交的变更(dirty,仅存在时显示)
88
+ - [untracked] <path>
89
+ - [unstaged] <path>
90
+ - [staged] <path>
91
+ ```
92
+
93
+ ## 结果补充规则
94
+
95
+ - untracked 结果用“无任务状态”替代“任务进度”,展示 work id 与 `<已清理/保留待恢复>`;不生成或暗示 task progress commit。
96
+ - 部分完成时必须明确列出已成功仓库、失败仓库/步骤、当前分支和下一恢复动作。业务结果与 progress sync 状态不得合并成一个模糊结论。
@@ -126,68 +126,15 @@ auto-loop 内部 `commit-only` 也允许 retained dirty 存在,但每个生成
126
126
 
127
127
  ## Step 3:展示最小计划
128
128
 
129
- 确认前禁止 `git add`、`git commit` 或 `git push`。计划只展示:
129
+ 确认前禁止 `git add`、`git commit` 或 `git push`。
130
130
 
131
- ```markdown
132
- ## Trellis Push 计划
131
+ 普通模式或用户 `commit-only` 在所有计划数据已经收敛、即将展示用户可见计划时,必须即时读取 `references/output-templates.md` 的“计划模板”和“共用展示规则”,再按该 reference 渲染。不得在 Skill 入口、仓库发现或预检阶段提前加载该文件;每次实际计划输出都以这次即时读取为准。
133
132
 
134
- [<PUSH / PUSH · MERGE / COMMIT-ONLY>] <N> 个仓库 · <N> 个 commit · <N> 个文件 · 保留未提交 <N> · 风险 <N>
135
-
136
- - **工作**:<任务名 | `Untracked work: <work-id>` | 无活动任务>
137
- - **顺序**:<repo-a> [-> `<local generation command>`] -> <repo-b> [-> task progress]
138
-
139
- ### 完成链证据
140
- - **Check-All**:<通过 / 通过(已接受风险:CHK-001,FBK-002) / 未运行 / 已失效 / 存在未处置 findings / blocked / 部分验证>
141
- - **Update-Spec**:<no-op / written / needs-review / 未运行 / 已失效>
142
-
143
- ### 1. <repository-name>
144
-
145
- - **Message**:`<commit message>`
146
- - **分支**:`<branch>` -> `<upstream>`
147
- - **变更**:<N> 个文件 · `+<adds> -<deletes>`
148
- - **父提交**:`<pre-merge-head>` + `<merge-head>`(仅已有 merge 时显示)
149
- - **Push**:<执行 / 跳过(commit-only)>
150
-
151
- 计划提交:
152
- - <exact files 或分组摘要>
153
-
154
- [生成(多仓需要时显示):前置仓成功后,在 `<working-directory>` 运行 `<exact local command>`;预计只影响 <后续仓 exact files 或分组摘要>]
155
-
156
- ### 保留未提交的变更(dirty,仅数量大于 0 时显示)
157
- - [untracked] <path>
158
- - [unstaged] <path>
159
- - [staged] <path>
160
-
161
- ### 风险(仅数量大于 0 时显示)
162
- - <Check-All / Update-Spec 风险,或 unknown ahead / branch-upstream / attribution risk>
163
-
164
- ### 任务记录(仅普通模式且存在活动任务时显示)
165
-
166
- - **Message**:`chore(task): update <task-name> progress` · <N> 个文件
167
- - **仓库**:<repository-name> · 分支:`<branch>` -> `<upstream>`
168
- - **计划提交**:<当前任务 exact files 或分组摘要>
169
- - **进度**:completed=<...> | partial=<...> | next=<...>
170
- - **执行**:<commit -> push -> progress commit -> progress push>
171
-
172
- 确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
173
- ```
174
-
175
- 展示规则:
176
-
177
- - 计划与结果模板中的字段行必须使用 `- **字段**:值` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格换行。
178
- - 「任务记录」是与各仓库区平级的独立 `###` 小节,仅普通模式且存在活动任务时整节展示;不再用方括号条件行代替小节标题。
179
- - 单仓 `planned` 不超过 8 个文件时完整列出。
180
- - 超过 8 个时按目录归组,最多 12 行;用户要求展开时展示同一 exact set。
181
- - 顶部仓库/commit/file 总数包含独立任务记录提交所在 Git root、该提交及其 exact files;任务记录文件使用相同的 8 文件展示阈值和展开规则。
182
- - 保留未提交的变更始终逐项标注 Git 状态;真正风险在独立“风险”区逐项展示。
183
- - 完成链证据始终显示当前状态,但不重复 Check-All 报告或 Spec review 正文;`未运行`、`已失效`、任一未处置 `CHK-*` / `FBK-*`、blocked、部分验证或 `needs-review` 同时计入风险区。已接受风险的问题也必须按 ID、严重度和影响进入风险区,但不得改标为阻断 finding。
184
- - 无活动 task、untracked 或 `commit-only` 时省略进度动作。
185
- - 不重复展示检查结果、规范复核、归档或其他阶段的详细信息。
186
- - 生成前无法确定的内容和增删行写“生成后计算”,不得填预测值。
133
+ reference 缺失、无法读取或缺少对应章节时停止并报告 `阻塞`,不得凭记忆重建、缩写或自制替代模板。
187
134
 
188
135
  普通多仓只确认一次。计划已展示生成命令和预计 exact files 时,命令成功且没有出现预计列表外的新 dirty path 就沿用原确认;内容、hash 或统计变化不重问。其它计划边界变化仍按 Step 4 重新规划。
189
136
 
190
- auto-loop 内部 `commit-only` 仍生成同样的逐仓执行数据用于自检和结果记录,但不再次询问用户;它只能在当前任务 artifacts、runner owned dirty 和 protected-retained 边界内形成 exact files/message。
137
+ auto-loop 内部 `commit-only` 不渲染交互式计划或结果,也不再次询问用户,因此不得为了内部执行读取 `references/output-templates.md`。它仍生成同样的逐仓执行数据用于自检、恢复和调用方结果记录,并且只能在当前任务 artifacts、runner owned dirty 和 protected-retained 边界内形成 exact files/message。
191
138
 
192
139
  ## Step 4:精确提交与推送
193
140
 
@@ -308,36 +255,9 @@ python3 ./.trellis/scripts/task_progress.py write \
308
255
 
309
256
  untracked 的全部已确认 Git 动作成功后,最后运行 `python3 ./.trellis/scripts/untracked_flow.py clear --reason completed --work-id <work-id>`。清理成功才报告完成链已结束;任一仓库、push 或清理失败都保留状态并报告恢复位置,禁止因部分成功伪造完成。用户 `commit-only` 的已确认动作全部成功时同样可以完成并清理。
310
257
 
311
- 结果复用计划的视觉顺序,先给总览,再逐仓报告实际 commit/push,最后报告任务进度与保留 dirty:
312
-
313
- ```markdown
314
- ## Trellis Push 结果
315
-
316
- [完成 / 部分完成 / 失败] <N> 个仓库 · <N> 个业务 commit
317
-
318
- ### 1. <repository-name>
319
-
320
- - **Commit**:`<short-hash> <actual commit message>`
321
- - **分支**:`<branch>` -> `<upstream>`
322
- - **状态**:<✓ 已推送 / · 仅本地提交 / ❌ 失败>
323
- - **生成**:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>(仅多仓需要时显示)
324
-
325
- ### 任务进度
326
-
327
- - **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
328
- - **记录**:<N> 个当前任务文件
329
- - **进度**:completed=<...> | partial=<...> | next=<...>
330
- - **失败原因**:<原因和恢复动作>(仅失败时显示)
331
-
332
- ### 保留未提交的变更(dirty,仅存在时显示)
333
- - [untracked] <path>
334
- - [unstaged] <path>
335
- - [staged] <path>
336
- ```
337
-
338
- untracked 结果用“无任务状态”替代“任务进度”,展示 work id 与 `<已清理/保留待恢复>`;不生成或暗示 task progress commit。
258
+ 普通模式、用户 `commit-only` 或 untracked 路径在即将展示用户可见结果时,必须再次即时读取 `references/output-templates.md` 的“共用展示规则”、“结果模板”和“结果补充规则”,再按该 reference 渲染。不得依赖 Step 3 曾经读取的模板仍在上下文中。
339
259
 
340
- 部分完成时必须明确列出已成功仓库、失败仓库/步骤、当前分支和下一恢复动作。业务结果与 progress sync 状态不得合并成一个模糊结论。
260
+ reference 缺失、无法读取或缺少对应章节时停止并报告 `阻塞`,不得凭记忆重建、缩写或自制替代结果。auto-loop 内部 `commit-only` 不读取或渲染该交互式结果模板,只按 Step 4 的失败保留契约向调用方返回逐仓 commits、files、retained、message 和失败位置,由 `trellis-auto-loop` 完成 `record + next`。
341
261
 
342
262
  ## 禁止事项
343
263
 
@@ -0,0 +1,96 @@
1
+ # Trellis Push 输出模板
2
+
3
+ 本 reference 只定义用户可见的计划、结果和展示规则。何时读取、是否确认、能否执行以及失败恢复均由同目录 `SKILL.md` 所有。
4
+
5
+ ## 计划模板
6
+
7
+ ```markdown
8
+ ## Trellis Push 计划
9
+
10
+ [<PUSH / PUSH · MERGE / COMMIT-ONLY>] <N> 个仓库 · <N> 个 commit · <N> 个文件 · 保留未提交 <N> · 风险 <N>
11
+
12
+ - **工作**:<任务名 | `Untracked work: <work-id>` | 无活动任务>
13
+ - **顺序**:<repo-a> [-> `<local generation command>`] -> <repo-b> [-> task progress]
14
+
15
+ ### 完成链证据
16
+ - **Check-All**:<通过 / 通过(已接受风险:CHK-001,FBK-002) / 未运行 / 已失效 / 存在未处置 findings / blocked / 部分验证>
17
+ - **Update-Spec**:<no-op / written / needs-review / 未运行 / 已失效>
18
+
19
+ ### 1. <repository-name>
20
+
21
+ - **Message**:`<commit message>`
22
+ - **分支**:`<branch>` -> `<upstream>`
23
+ - **变更**:<N> 个文件 · `+<adds> -<deletes>`
24
+ - **父提交**:`<pre-merge-head>` + `<merge-head>`(仅已有 merge 时显示)
25
+ - **Push**:<执行 / 跳过(commit-only)>
26
+
27
+ 计划提交:
28
+ - <exact files 或分组摘要>
29
+
30
+ [生成(多仓需要时显示):前置仓成功后,在 `<working-directory>` 运行 `<exact local command>`;预计只影响 <后续仓 exact files 或分组摘要>]
31
+
32
+ ### 保留未提交的变更(dirty,仅数量大于 0 时显示)
33
+ - [untracked] <path>
34
+ - [unstaged] <path>
35
+ - [staged] <path>
36
+
37
+ ### 风险(仅数量大于 0 时显示)
38
+ - <Check-All / Update-Spec 风险,或 unknown ahead / branch-upstream / attribution risk>
39
+
40
+ ### 任务记录(仅普通模式且存在活动任务时显示)
41
+
42
+ - **Message**:`chore(task): update <task-name> progress` · <N> 个文件
43
+ - **仓库**:<repository-name> · 分支:`<branch>` -> `<upstream>`
44
+ - **计划提交**:<当前任务 exact files 或分组摘要>
45
+ - **进度**:completed=<...> | partial=<...> | next=<...>
46
+ - **执行**:<commit -> push -> progress commit -> progress push>
47
+
48
+ 确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
49
+ ```
50
+
51
+ ## 共用展示规则
52
+
53
+ - 计划与结果模板中的字段行必须使用 `- **字段**:值` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格换行。
54
+ - 「任务记录」是与各仓库区平级的独立 `###` 小节,仅普通模式且存在活动任务时整节展示;不再用方括号条件行代替小节标题。
55
+ - 单仓 `planned` 不超过 8 个文件时完整列出。
56
+ - 超过 8 个时按目录归组,最多 12 行;用户要求展开时展示同一 exact set。
57
+ - 顶部仓库/commit/file 总数包含独立任务记录提交所在 Git root、该提交及其 exact files;任务记录文件使用相同的 8 文件展示阈值和展开规则。
58
+ - 保留未提交的变更始终逐项标注 Git 状态;真正风险在独立“风险”区逐项展示。
59
+ - 完成链证据始终显示当前状态,但不重复 Check-All 报告或 Spec review 正文;`未运行`、`已失效`、任一未处置 `CHK-*` / `FBK-*`、blocked、部分验证或 `needs-review` 同时计入风险区。已接受风险的问题也必须按 ID、严重度和影响进入风险区,但不得改标为阻断 finding。
60
+ - 无活动 task、untracked 或 `commit-only` 时省略进度动作。
61
+ - 不重复展示检查结果、规范复核、归档或其他阶段的详细信息。
62
+ - 生成前无法确定的内容和增删行写“生成后计算”,不得填预测值。
63
+
64
+ ## 结果模板
65
+
66
+ 结果复用计划的视觉顺序,先给总览,再逐仓报告实际 commit/push,最后报告任务进度与保留 dirty:
67
+
68
+ ```markdown
69
+ ## Trellis Push 结果
70
+
71
+ [完成 / 部分完成 / 失败] <N> 个仓库 · <N> 个业务 commit
72
+
73
+ ### 1. <repository-name>
74
+
75
+ - **Commit**:`<short-hash> <actual commit message>`
76
+ - **分支**:`<branch>` -> `<upstream>`
77
+ - **状态**:<✓ 已推送 / · 仅本地提交 / ❌ 失败>
78
+ - **生成**:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>(仅多仓需要时显示)
79
+
80
+ ### 任务进度
81
+
82
+ - **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
83
+ - **记录**:<N> 个当前任务文件
84
+ - **进度**:completed=<...> | partial=<...> | next=<...>
85
+ - **失败原因**:<原因和恢复动作>(仅失败时显示)
86
+
87
+ ### 保留未提交的变更(dirty,仅存在时显示)
88
+ - [untracked] <path>
89
+ - [unstaged] <path>
90
+ - [staged] <path>
91
+ ```
92
+
93
+ ## 结果补充规则
94
+
95
+ - untracked 结果用“无任务状态”替代“任务进度”,展示 work id 与 `<已清理/保留待恢复>`;不生成或暗示 task progress commit。
96
+ - 部分完成时必须明确列出已成功仓库、失败仓库/步骤、当前分支和下一恢复动作。业务结果与 progress sync 状态不得合并成一个模糊结论。
@@ -6,6 +6,7 @@
6
6
  "patches": [
7
7
  "scripts/task-store-write-integrity",
8
8
  "scripts/runtime-state-integrity",
9
- "scripts/session-context-update-boundary"
9
+ "scripts/session-context-update-boundary",
10
+ "hooks/session-start/update-boundary"
10
11
  ]
11
12
  }
@@ -0,0 +1,7 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "id": "trellis-session-insight",
4
+ "aliases": ["session-insight"],
5
+ "installMode": "full-or-selected",
6
+ "patches": ["skills/trellis-session-insight/grok-memory-support"]
7
+ }
@@ -6,7 +6,7 @@
6
6
  "minor": 6
7
7
  },
8
8
  "testedVersions": [
9
- "0.6.12"
9
+ "0.6.14"
10
10
  ],
11
11
  "untestedPatchPolicy": "warning",
12
12
  "newLinePolicy": "error"
@@ -326,7 +326,7 @@
326
326
  ]
327
327
  },
328
328
  "owner": "workflow-state",
329
- "reason": "局部 Patch 必须同时保留 Flower subject 分支与 0.6.12 的 no-trellis、ZCode 和 Codex auto 能力。"
329
+ "reason": "局部 Patch 必须同时保留 Flower subject 分支与 0.6.14 的 no-trellis、ZCode 和 Codex auto 能力。"
330
330
  },
331
331
  {
332
332
  "id": "paths-required-clear-result",
@@ -1464,6 +1464,7 @@
1464
1464
  "whenOperations": [
1465
1465
  "session-context-update-imports",
1466
1466
  "session-context-update-constants",
1467
+ "session-context-update-docstring",
1467
1468
  "session-context-update-helpers",
1468
1469
  "session-context-update-output"
1469
1470
  ],
@@ -1471,14 +1472,95 @@
1471
1472
  "type": "absent-literal",
1472
1473
  "values": [
1473
1474
  "def _get_update_hint(",
1475
+ "def get_update_hint(",
1474
1476
  "def _mark_update_check_attempted(",
1475
1477
  "def _update_marker_path(",
1478
+ "get_update_hint - Once-per-session",
1476
1479
  "[\"trellis\", \"--version\"]"
1477
1480
  ]
1478
1481
  },
1479
1482
  "owner": "flower-update-hook",
1480
1483
  "reason": "默认 Session Context 只负责项目上下文;更新检查必须统一由 Flower SessionStart Hook 进入。"
1481
1484
  },
1485
+ {
1486
+ "id": "session-start-required-flower-update-boundary-claude",
1487
+ "severity": "error",
1488
+ "target": ".claude/hooks/session-start.py",
1489
+ "whenOperations": [
1490
+ "session-start-update-notice-builder",
1491
+ "session-start-update-hint-resolver",
1492
+ "session-start-update-notice-output"
1493
+ ],
1494
+ "assertion": {
1495
+ "type": "required-literal",
1496
+ "values": [
1497
+ "# BEGIN skill-garden patch session-start-update-notice-builder v0.6",
1498
+ "Return the first-reply notice without adding a second update channel.",
1499
+ "# BEGIN skill-garden patch session-start-update-notice-output v0.6",
1500
+ "output.write(_build_first_reply_notice())",
1501
+ "<first-reply-notice>"
1502
+ ]
1503
+ },
1504
+ "owner": "flower-update-hook",
1505
+ "reason": "共享 SessionStart 必须保留首轮提示,但不能重新引入 Trellis 原生更新入口。"
1506
+ },
1507
+ {
1508
+ "id": "session-start-no-upstream-update-relay-zcode",
1509
+ "severity": "error",
1510
+ "target": ".zcode/hooks/session-start.py",
1511
+ "whenOperations": [
1512
+ "session-start-update-notice-builder",
1513
+ "session-start-update-hint-resolver",
1514
+ "session-start-update-notice-output"
1515
+ ],
1516
+ "assertion": {
1517
+ "type": "absent-literal",
1518
+ "values": [
1519
+ "def _resolve_update_hint(",
1520
+ "from common.session_context import get_update_hint",
1521
+ "Also relay this Trellis maintenance notice",
1522
+ "_resolve_update_hint(trellis_dir, context_key)"
1523
+ ]
1524
+ },
1525
+ "owner": "flower-update-hook",
1526
+ "reason": "ZCode 代表共享 Hook 输出,必须证明上游 update relay 已从最终产物移除。"
1527
+ },
1528
+ {
1529
+ "id": "session-insight-required-grok-memory-agents",
1530
+ "severity": "error",
1531
+ "target": ".agents/skills/trellis-session-insight/SKILL.md",
1532
+ "whenOperations": ["session-insight-grok-overview"],
1533
+ "assertion": {
1534
+ "type": "required-literal",
1535
+ "values": [
1536
+ "Claude Code, Codex, Grok Build, Pi Agent, and ZCode",
1537
+ "`~/.grok/sessions/`",
1538
+ "OpenCode logs are not yet indexable"
1539
+ ]
1540
+ },
1541
+ "owner": "trellis-session-insight",
1542
+ "reason": "Session Insight 说明必须与 0.6.14 的 Grok reader 和 OpenCode 限制一致。"
1543
+ },
1544
+ {
1545
+ "id": "session-insight-required-grok-cli-claude",
1546
+ "severity": "error",
1547
+ "target": ".claude/skills/trellis-session-insight/references/cli-quick-reference.md",
1548
+ "whenOperations": [
1549
+ "session-insight-grok-cli-flags",
1550
+ "session-insight-grok-cli-caveats"
1551
+ ],
1552
+ "assertion": {
1553
+ "type": "required-literal",
1554
+ "values": [
1555
+ "`--platform claude\\|codex\\|grok\\|opencode\\|pi\\|zcode\\|all`",
1556
+ "Claude, Codex, Grok, Pi, and ZCode support native boundaries",
1557
+ "Grok may only retain a rendered transcript",
1558
+ "`~/.grok/sessions/`"
1559
+ ]
1560
+ },
1561
+ "owner": "trellis-session-insight",
1562
+ "reason": "Claude 副本的 CLI reference 必须跟随 0.6.14 runtime help 和压缩恢复边界。"
1563
+ },
1482
1564
  {
1483
1565
  "id": "codex-check-required-check-all-intent-guard",
1484
1566
  "severity": "error",
@@ -0,0 +1,3 @@
1
+ def _build_first_reply_notice() -> str:
2
+ """Return the first-reply notice without adding a second update channel."""
3
+ return FIRST_REPLY_NOTICE
@@ -0,0 +1,18 @@
1
+ def _build_first_reply_notice(update_hint: str | None) -> str:
2
+ """First-reply notice, carrying the Trellis update reminder when there is one.
3
+
4
+ The reminder has to reach the *user*, not just the model's context — a line
5
+ buried in SessionStart context is exactly how the update step kept getting
6
+ skipped. This block is already the payload's one "say it out loud" channel,
7
+ so the hint rides along instead of growing a second mechanism.
8
+
9
+ With no hint the notice is byte-identical to the plain constant: no empty
10
+ block, no placeholder line.
11
+ """
12
+ if not update_hint:
13
+ return FIRST_REPLY_NOTICE
14
+ return (
15
+ f"{_FIRST_REPLY_NOTICE_HEAD}\n"
16
+ f"Also relay this Trellis maintenance notice on its own line in that same reply: {update_hint}\n"
17
+ f"{_FIRST_REPLY_NOTICE_TAIL}"
18
+ )
@@ -0,0 +1 @@
1
+ output.write(_build_first_reply_notice())
@@ -0,0 +1 @@
1
+ output.write(_build_first_reply_notice(_resolve_update_hint(trellis_dir, context_key)))