flower-trellis 0.6.0-beta.8 → 0.6.0-beta.9
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 +9 -9
- package/enhancements/0.6/.agents/skills/trellis-auto-loop/SKILL.md +13 -2
- package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md +69 -55
- package/enhancements/0.6/.agents/skills/trellis-create-command/SKILL.md +21 -16
- package/enhancements/0.6/.agents/skills/trellis-diff-brief/SKILL.md +2 -2
- package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +30 -27
- package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +11 -9
- package/enhancements/0.6/.agents/skills/trellis-run-full-chain/SKILL.md +14 -14
- package/enhancements/0.6/.agents/skills/trellis-task-brief/SKILL.md +5 -7
- package/enhancements/0.6/.agents/skills/trellis-visualize/SKILL.md +4 -4
- package/enhancements/0.6/.claude/skills/trellis-auto-loop/SKILL.md +13 -2
- package/enhancements/0.6/.claude/skills/trellis-check-all/references/reporting-and-disposition.md +69 -55
- package/enhancements/0.6/.claude/skills/trellis-create-command/SKILL.md +21 -16
- package/enhancements/0.6/.claude/skills/trellis-diff-brief/SKILL.md +2 -2
- package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +30 -27
- package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +11 -9
- package/enhancements/0.6/.claude/skills/trellis-run-full-chain/SKILL.md +14 -14
- package/enhancements/0.6/.claude/skills/trellis-task-brief/SKILL.md +5 -7
- package/enhancements/0.6/.claude/skills/trellis-visualize/SKILL.md +4 -4
- package/enhancements/0.6/overrides/patches/workflow/hub/content.md +1 -0
- package/enhancements/0.6/overrides/patches/workflow/state-no-task/content.md +1 -1
- package/enhancements/0.6/overrides/patches/workflow/states-in-progress/common-content.md +1 -1
- package/enhancements/0.6/overrides/patches/workflow/states-planning/common-content.md +1 -1
- package/enhancements/0.6/scripts/auto_loop.py +119 -10
- package/enhancements/MANIFEST.json +2 -2
- package/package.json +4 -4
- package/src/builtin-plugins/skill-garden/content-adapter.js +9 -5
- package/src/builtin-plugins/skill-garden/provider.js +1 -2
- package/src/cli.js +14 -3
- package/src/commands/trellis.js +9 -5
- package/src/lib/trellis-control.js +3 -0
- package/src/plugin/install/content-hash.js +5 -1
- package/src/plugin/install/transaction-writer.js +6 -0
- package/src/plugin/integrity/canonical-tree.js +71 -3
package/README.md
CHANGED
|
@@ -53,13 +53,13 @@ flower-trellis init -u <your-name> -y
|
|
|
53
53
|
flower-trellis update
|
|
54
54
|
|
|
55
55
|
# 真正关闭整个项目中全部平台的 Trellis 集成
|
|
56
|
-
flower-trellis
|
|
56
|
+
flower-trellis disable --target .
|
|
57
57
|
|
|
58
58
|
# 查看项目级开关和入口漂移状态
|
|
59
|
-
flower-trellis
|
|
59
|
+
flower-trellis status --target .
|
|
60
60
|
|
|
61
61
|
# 恢复 Trellis,并规范化到当前 Flower/Trellis 版本
|
|
62
|
-
flower-trellis
|
|
62
|
+
flower-trellis enable --target .
|
|
63
63
|
|
|
64
64
|
# 临时保留最近 5 份升级备份;传 0 可关闭本次自动清理
|
|
65
65
|
flower-trellis update --backup-retention 5
|
|
@@ -119,27 +119,27 @@ flower-trellis -v
|
|
|
119
119
|
|
|
120
120
|
## 项目级关闭与恢复
|
|
121
121
|
|
|
122
|
-
`flower-trellis
|
|
122
|
+
`flower-trellis disable` 是整个项目的真正关闭,不是只跳过一次 Hook。它会在一次事务中移除全部已配置平台可发现的 Trellis Skills、Agents、Commands、Workflows、Hooks、Extensions、平台配置入口,以及 `AGENTS.md` 中的 Trellis 管理块。开关始终作用于整个项目,不提供平台级参数,也不会留下不同平台一开一关的混合状态。
|
|
123
123
|
|
|
124
124
|
关闭不会删除 `.trellis/tasks/`、`.trellis/spec/`、`.trellis/workspace/`、当前任务或 `.flower/plugins.json` / `plugin-lock.json` / `state.json`。恢复材料保存在 gitignored 的 `.flower/trellis-control.json` 和 `.flower/trellis-detached/`;它们记录原始字节、文件 mode、所有权和关闭前后摘要。当前会话已经加载的上下文无法被命令撤回,因此 disable 或 enable 完成后都需要重启 AI 会话。
|
|
125
125
|
|
|
126
126
|
```bash
|
|
127
127
|
# 只读预演,显示将 detach 的全部入口
|
|
128
|
-
flower-trellis
|
|
128
|
+
flower-trellis disable --dry-run --json --target .
|
|
129
129
|
|
|
130
130
|
# 真正关闭;修改过的独占受管文件默认会在写盘前阻断
|
|
131
|
-
flower-trellis
|
|
131
|
+
flower-trellis disable --target .
|
|
132
132
|
|
|
133
133
|
# 查看 enabled / disabled / drifted / repair-required / not-initialized
|
|
134
|
-
flower-trellis
|
|
134
|
+
flower-trellis status --json --target .
|
|
135
135
|
|
|
136
136
|
# 精确恢复关闭前现场,再运行当前版本的 update 和 Plugin replay
|
|
137
|
-
flower-trellis
|
|
137
|
+
flower-trellis enable --target .
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
共享 JSON 与 `AGENTS.md` 采用结构化恢复,关闭期间新增的无关用户配置会保留。无法安全拆分的修改默认冲突并保持零写入;`--force` 只处理恢复证据完整时的独占文件冲突、共享 JSON 恢复冲突或 drifted 重收敛,用户现场会先保存到 detached 恢复证据中。`repair-required` 表示控制状态或恢复材料已经不可信,disable/enable 即使带 `--force` 也会拒绝覆盖,必须先依据诊断修复证据。
|
|
141
141
|
|
|
142
|
-
项目处于 disabled 时,`flower-trellis update`、`self-update` 的项目更新链,以及 `plugin add/update/remove/replay` 会临时恢复必要入口,完成写操作后再次 detach,并校验最终仍为 disabled;外部 Plugin 内容不会被当作 Trellis 入口删除。直接运行上游 `trellis update` 不经过这一控制面,可能重新生成入口,此时 `flower-trellis
|
|
142
|
+
项目处于 disabled 时,`flower-trellis update`、`self-update` 的项目更新链,以及 `plugin add/update/remove/replay` 会临时恢复必要入口,完成写操作后再次 detach,并校验最终仍为 disabled;外部 Plugin 内容不会被当作 Trellis 入口删除。直接运行上游 `trellis update` 不经过这一控制面,可能重新生成入口,此时 `flower-trellis status` 会报告 `drifted`。`disable` 也不等同于 `uninstall`:历史数据和恢复能力会继续保留。
|
|
143
143
|
|
|
144
144
|
## Flower Plugin
|
|
145
145
|
|
|
@@ -14,7 +14,7 @@ description: "启动、恢复和推进 Trellis 自动任务循环。用于用户
|
|
|
14
14
|
- 新 run 先 prepare 全部显式任务,Open Questions 全部收敛后才进入 running。running 中不再询问 route、planning 或普通 Check-All 停止边界。
|
|
15
15
|
- 每个 action 完成后,必须用同名 `record --action ...` 精确回写并立即 `next`。不得根据聊天摘要手改 runtime 或跳步。
|
|
16
16
|
- `record` 返回 `status=retryable` 时保留的是同一个 outstanding Check action:不得运行 `next`,必须先按返回指令消解漂移并重录。
|
|
17
|
-
- 本地提交是自动终点。不得 push、merge、release、deploy、finish-work 或 archive;
|
|
17
|
+
- 本地提交是自动终点。不得 push、merge、release、deploy、finish-work 或 archive;runner 在 item 本地提交成功后把该任务写入本地完成态(`status=completed` + `completedAt`),归档仍需用户显式执行。
|
|
18
18
|
- 任务顺序只决定稳定调度顺序,不隐含依赖。依赖必须通过 `--depends-on dependent=dependency` 明确传入或由 planning artifacts 明确声明。
|
|
19
19
|
- 任务级失败只阻塞自身及显式依赖项;独立任务继续。fix/recheck、planning repair 与安全的 commit-only repair 各最多 3 轮,队列结束后不自动执行第二遍恢复扫描。
|
|
20
20
|
- schema 1 runtime 继续按 runner 返回的旧 action 恢复,包括 outstanding `confirm_brief`;不要把旧 run 改写成 schema 2。
|
|
@@ -144,7 +144,7 @@ Check-All 自动修复当前任务 `implement.md` 或 `brief.md` 时,每个实
|
|
|
144
144
|
|
|
145
145
|
`commit-repairable` 只用于继续执行仍然安全的本地确定性链。外部副作用风险或任何 Git 安全边界问题必须用 `blocked` 或非 repairable `failed` 立即结束当前项。部分成功提交跨 retry/resume 保留,不回滚、不 amend、不重复创建。
|
|
146
146
|
|
|
147
|
-
`decisions.jsonl`
|
|
147
|
+
`decisions.jsonl` 属于当前任务文件,发生决策时应进入该任务最终精确提交。runner 在 item 本地提交成功后把 `task.json.status` 写为 `completed` 并补 `completedAt`;只允许 `in_progress -> completed` 这一个跃迁,既有 `completedAt` 保持不变。这是本地完成态,不代表已归档。
|
|
148
148
|
|
|
149
149
|
## Resume, Retry, Stop
|
|
150
150
|
|
|
@@ -163,6 +163,16 @@ python3 ./.trellis/scripts/auto_loop.py stop --reason "<原因>"
|
|
|
163
163
|
|
|
164
164
|
默认使用紧凑输出;只有诊断 manifest、dirty、漂移、依赖链或决策详情时加 `--verbose`。`retryable` 不是终态,由 agent 在同一 outstanding Check action 内立即自纠;`completed_with_blocked` 才是本次 run 的可审计终态,后续恢复由用户显式调用 `retry-blocked`。
|
|
165
165
|
|
|
166
|
+
## Run 收尾交接
|
|
167
|
+
|
|
168
|
+
队列到达终态后必须向用户报告归档待办,不得只说 run 已完成。待办从终态 `next`、`record` 或 `status` 的 `summary.pending_archive` 读取:
|
|
169
|
+
|
|
170
|
+
- `tasks_awaiting_archive`:已写入本地完成态、等待用户显式归档的队列任务,逐项列出。
|
|
171
|
+
- `parent_tasks_outside_queue`:队列任务声明的父任务中未纳入本次队列的部分。父任务只负责范围、依赖顺序和集成复核,不进入实现流水线,但必须排在全部子任务归档之后单独 finish-work。
|
|
172
|
+
- run 结束后 pointer 已清除,`status` 走最近 run 列表;`pending_archive` 在该列表里同样可读。
|
|
173
|
+
|
|
174
|
+
run 期间新建的后补子任务不在冻结队列内,runner 不追踪;发现时按普通任务单独推进,不得手改 runtime 塞进当前 run。归档动作本身始终由用户发起。
|
|
175
|
+
|
|
166
176
|
## 禁止事项
|
|
167
177
|
|
|
168
178
|
- 不手写 `.trellis/.runtime/auto-loop/*.json`,不提交 runtime 或 `.route-prefs.tmp`。
|
|
@@ -170,4 +180,5 @@ python3 ./.trellis/scripts/auto_loop.py stop --reason "<原因>"
|
|
|
170
180
|
- 不用 `start --force` 代替 `retry-blocked`。
|
|
171
181
|
- `record` 返回 `retryable` 后不得调用 `next` 或重新发起 action。
|
|
172
182
|
- 不把 queue item completed 解释为任务已归档。
|
|
183
|
+
- 不只报告 run 已完成而省略 `pending_archive` 待办,也不代用户执行 finish-work 或 archive。
|
|
173
184
|
- 不在无人值守执行中替用户回答 Open Questions。
|
package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md
CHANGED
|
@@ -10,39 +10,41 @@
|
|
|
10
10
|
|
|
11
11
|
### `CHK-*` 主路径问题
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
| 字段 | 规则 |
|
|
16
|
-
| --- | --- |
|
|
17
|
-
| ID | 首次记录时依次分配 `CHK-001`、`CHK-002`;当前修复/重检循环中不重新编号 |
|
|
18
|
-
| 严重度 | `P0` 数据破坏/安全事故/无法安全继续;`P1` 功能错误/需求违背/发布阻塞;`P2` 测试/规范/维护性/非阻塞风险 |
|
|
19
|
-
| 标题 | 描述根因,不用症状堆叠 |
|
|
20
|
-
| 来源 | prd/design/implement/spec/assumption/verification |
|
|
21
|
-
| 证据 | `file:line`、实际契约或命令结果 |
|
|
22
|
-
| 影响 | 用户、数据或工程影响 |
|
|
23
|
-
| 建议 | 推荐修复方式,不在检查阶段执行 |
|
|
24
|
-
| 位置 | 同一根因的全部受影响位置 |
|
|
25
|
-
| 验证 | 修复后的命令或手动验证步骤 |
|
|
13
|
+
每个独立根因使用固定字段。`ID`、`严重度`、`来源`、`处置`、`标题` 内联在条目的四级标题行,其余字段以加粗标签的列表项逐行展开:
|
|
26
14
|
|
|
27
|
-
|
|
15
|
+
| 字段 | 呈现 | 规则 |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| ID | 标题行 | 首次记录时依次分配 `CHK-001`、`CHK-002`;当前修复/重检循环中不重新编号 |
|
|
18
|
+
| 严重度 | 标题行 | `P0` 数据破坏/安全事故/无法安全继续;`P1` 功能错误/需求违背/发布阻塞;`P2` 测试/规范/维护性/非阻塞风险 |
|
|
19
|
+
| 来源 | 标题行 | prd/design/implement/spec/assumption/verification |
|
|
20
|
+
| 处置 | 标题行 | 仅 `已接受风险` 时在标题行末尾追加 `` `[已接受风险]` `` 标签;待处理是默认状态,不加标签也不占行 |
|
|
21
|
+
| 标题 | 标题行 | 描述根因,不用症状堆叠 |
|
|
22
|
+
| 证据 | 加粗字段 | 同一根因的全部受影响 `file:line`,以及实际契约或命令结果;受影响位置与问题证明合并在本字段,不再单列「位置」 |
|
|
23
|
+
| 影响 | 加粗字段 | 用户、数据或工程影响 |
|
|
24
|
+
| 建议 | 加粗字段 | 推荐修复方式,不在检查阶段执行 |
|
|
25
|
+
| 验证 | 加粗字段 | 修复后的命令或手动验证步骤 |
|
|
28
26
|
|
|
29
|
-
|
|
27
|
+
### `FBK-*` 兜底问题
|
|
30
28
|
|
|
31
|
-
|
|
32
|
-
| --- | --- |
|
|
33
|
-
| ID | 首次记录时依次分配 `FBK-001`、`FBK-002`;当前修复/重检循环中不重新编号 |
|
|
34
|
-
| 严重度 | 与 `CHK-*` 使用同一 P0/P1/P2 影响尺度 |
|
|
35
|
-
| 标题 | 描述具体保护路径根因,不写泛化“增强健壮性” |
|
|
36
|
-
| 来源 | prd/design/implement/spec/assumption/verification |
|
|
37
|
-
| 证据 | 保护缺失、错误或可绕过的 `file:line`、实际契约或命令结果 |
|
|
38
|
-
| 兜底场景 | 可达的异常、失败、越权、数据损害或诊断盲区场景 |
|
|
39
|
-
| 影响 | 当前缺口的用户、数据、安全或工程影响 |
|
|
40
|
-
| 保护收益 | 修复后恢复或新增的明确保护结果 |
|
|
41
|
-
| 建议 | 推荐修复方式,不在检查阶段执行 |
|
|
42
|
-
| 位置 | 同一根因的全部受影响位置 |
|
|
43
|
-
| 验证 | 修复后的测试、故障注入、命令或手动验证步骤 |
|
|
29
|
+
每个满足严格准入条件的独立兜底根因使用固定字段。`ID`、`严重度`、`来源`、`处置`、`标题` 内联在条目的四级标题行,其余字段以加粗标签的列表项逐行展开:
|
|
44
30
|
|
|
45
|
-
|
|
31
|
+
| 字段 | 呈现 | 规则 |
|
|
32
|
+
| --- | --- | --- |
|
|
33
|
+
| ID | 标题行 | 首次记录时依次分配 `FBK-001`、`FBK-002`;当前修复/重检循环中不重新编号 |
|
|
34
|
+
| 严重度 | 标题行 | 与 `CHK-*` 使用同一 P0/P1/P2 影响尺度 |
|
|
35
|
+
| 来源 | 标题行 | prd/design/implement/spec/assumption/verification |
|
|
36
|
+
| 处置 | 标题行 | 仅 `已接受风险` 时在标题行末尾追加 `` `[已接受风险]` `` 标签;待处理是默认状态,不加标签也不占行 |
|
|
37
|
+
| 标题 | 标题行 | 描述具体保护路径根因,不写泛化“增强健壮性” |
|
|
38
|
+
| 证据 | 加粗字段 | 保护缺失、错误或可绕过的全部受影响 `file:line`,以及实际契约或命令结果;同时承载 `references/fallback-findings.md` 准入 1「具体位置」与准入 3「问题证据」,不再单列「位置」 |
|
|
39
|
+
| 兜底场景 | 加粗字段 | 可达的异常、失败、越权、数据损害或诊断盲区场景;承载准入 2「可达场景」 |
|
|
40
|
+
| 影响 | 加粗字段 | 当前缺口的用户、数据、安全或工程影响 |
|
|
41
|
+
| 保护收益 | 加粗字段 | 修复后恢复或新增的明确保护结果;承载准入 4「保护收益」,不得省略或并入建议 |
|
|
42
|
+
| 建议 | 加粗字段 | 推荐修复方式,不在检查阶段执行 |
|
|
43
|
+
| 验证 | 加粗字段 | 修复后的测试、故障注入、命令或手动验证步骤;承载准入 5「验证方式」 |
|
|
44
|
+
|
|
45
|
+
`FBK-*` 字段与 `references/fallback-findings.md` 的严格准入五项一一对应。合并「位置」到「证据」只改变呈现方式,不放宽任何准入门槛;任一准入项缺失时仍不得生成 `FBK-*`。
|
|
46
|
+
|
|
47
|
+
`CHK-*` 与 `FBK-*` 分开编号。同一根因的多个位置合并到一个问题;报告按严重度排序,但不得因此重排已经分配的 ID。新根因使用对应通道的下一个 ID。每个问题的处置状态默认为待处理且不加标签,只有 `已接受风险` 才在条目标题行末尾追加 `` `[已接受风险]` `` 标签。`仅保留报告` 不改变处置状态,相关问题仍不加标签。处置状态不改变 ID、通道和严重度。
|
|
46
48
|
|
|
47
49
|
## 风险接受
|
|
48
50
|
|
|
@@ -50,8 +52,8 @@
|
|
|
50
52
|
|
|
51
53
|
1. 只有用户可以接受风险;主会话、subagent 和 validated auto-loop 都不得代替用户推断或授权。
|
|
52
54
|
2. 接受必须唯一对应当前报告的问题 ID。用户可以写 `接受风险 CHK-001,FBK-002 并继续`;当前报告只有一个候选时,“这个问题”“不管这个”等明确指代可以解析为该 ID。P0 必须逐项写出精确 ID,不接受 `接受全部剩余风险`。
|
|
53
|
-
3. 接受只绑定当前问题证据与实际 diff
|
|
54
|
-
4.
|
|
55
|
+
3. 接受只绑定当前问题证据与实际 diff。受影响代码、契约、验证结果、问题内容或严重度变化后,原接受立即失效,问题恢复为待处理并移除标题行末尾的 `` `[已接受风险]` `` 标签。
|
|
56
|
+
4. 已接受问题继续完整展示证据、影响、建议和验证,标题行末尾追加 `` `[已接受风险]` `` 标签;不得删除条目、改列 `DOC-*` 或伪报已修复。
|
|
55
57
|
5. `strict pass` 只用于剩余 `CHK-*` / `FBK-*` 均为 0。所有剩余问题均已被有效接受,且无 blocked、无部分验证、无未接受的实质剩余风险时,结论为 `通过·已接受风险`。
|
|
56
58
|
6. blocked、部分验证和无法唯一对应到当前问题 ID 的实质剩余风险不是 `CHK-*` / `FBK-*` 处置状态,不能借风险接受绕过。
|
|
57
59
|
7. `仅保留报告` 表示停止处置并等待,不等于接受风险;只有带明确接受语义的用户回复才改变问题处置状态。
|
|
@@ -67,10 +69,10 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
|
|
|
67
69
|
|
|
68
70
|
[<通过/通过·已接受风险/未通过/阻塞>] <N> 个维度 · CHK <N>(接受 <N>)· FBK <N>(接受 <N>)· 自动修复 DOC <N> · P0 <N> / P1 <N> / P2 <N> · 验证 <通过>/<总数>
|
|
69
71
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
72
|
+
- **工作**:<任务名称 | Untracked work: work-id | 无活动工作>
|
|
73
|
+
- **范围**:<文件数与层级摘要;包含自动修复产生的文档 diff>
|
|
74
|
+
- **画像**:requested=<auto/light/full> · effective=<light/full> · confidence=<high/fallback-full/escalated> · <原因摘要>
|
|
75
|
+
- **结论**:<一句话结论>
|
|
74
76
|
|
|
75
77
|
### 维度结果
|
|
76
78
|
|
|
@@ -88,27 +90,34 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
|
|
|
88
90
|
|
|
89
91
|
### 主路径问题
|
|
90
92
|
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
-
|
|
95
|
-
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
93
|
+
#### `CHK-001` `P1` `<来源>` <标题>
|
|
94
|
+
|
|
95
|
+
- **证据**
|
|
96
|
+
- `<file:line>` — <契约、实际值或命令结果>
|
|
97
|
+
- `<file:line>` — <契约、实际值或命令结果>
|
|
98
|
+
- **影响**:<影响>
|
|
99
|
+
- **建议**:<修复建议>
|
|
100
|
+
- **验证**:<验证命令或步骤>
|
|
101
|
+
|
|
102
|
+
#### `CHK-002` `P2` `<来源>` <标题> `[已接受风险]`
|
|
103
|
+
|
|
104
|
+
- **证据**
|
|
105
|
+
- `<file:line>` — <契约、实际值或命令结果>
|
|
106
|
+
- **影响**:<影响>
|
|
107
|
+
- **建议**:<修复建议>
|
|
108
|
+
- **验证**:<验证命令或步骤>
|
|
99
109
|
|
|
100
110
|
### 兜底问题
|
|
101
111
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
- 验证:<验证命令或步骤>
|
|
112
|
+
#### `FBK-001` `P1` `<来源>` <标题>
|
|
113
|
+
|
|
114
|
+
- **证据**
|
|
115
|
+
- `<file:line>` — <保护缺失、错误或可绕过的证明>
|
|
116
|
+
- **兜底场景**:<可达异常或失败场景>
|
|
117
|
+
- **影响**:<影响>
|
|
118
|
+
- **保护收益**:<修复后的明确保护结果>
|
|
119
|
+
- **建议**:<修复建议>
|
|
120
|
+
- **验证**:<验证命令或步骤>
|
|
112
121
|
|
|
113
122
|
### 未覆盖与风险
|
|
114
123
|
|
|
@@ -116,8 +125,8 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
|
|
|
116
125
|
|
|
117
126
|
### 修复批次
|
|
118
127
|
|
|
119
|
-
|
|
120
|
-
|
|
128
|
+
- **批次 1**:<CHK/FBK 问题 ID> · <修复目标>
|
|
129
|
+
- **修复后**:定向验证 -> Check-All 重检
|
|
121
130
|
|
|
122
131
|
操作:`修复全部`、`修复 CHK-001,FBK-002`、`接受风险 CHK-001,FBK-002 并继续`、`仅保留报告`
|
|
123
132
|
|
|
@@ -128,6 +137,11 @@ interactive 模式完成所有可继续检查和允许的 `DOC-*` 自动修复
|
|
|
128
137
|
|
|
129
138
|
展示规则:
|
|
130
139
|
|
|
140
|
+
- 报告头部的“工作/范围/画像/结论”与“修复批次”内的行必须使用 `- ` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格实现换行。
|
|
141
|
+
- 每个问题必须由一个四级标题承载,固定顺序为 `` #### `<ID>` `<严重度>` `<来源>` <标题> ``。仅 `已接受风险` 的问题在标题末尾追加 `` `[已接受风险]` ``;待处理不加标签。`来源` 与 `处置` 都不再单独占行。
|
|
142
|
+
- 不得改用 `- [ ]` / `- [x]` 列表项承载问题条目。终端渲染器会把松散列表压平,相邻条目会糊成一段无法分辨;只有标题这类块级元素才能稳定产生视觉分隔。修复状态由“修复结果”表格表达,不靠 checkbox。
|
|
143
|
+
- 条目内部的字段一律写成 `- **<字段>**:<值>` 加粗标签列表项。字段值折行后回到左边界,加粗标签是唯一能定位字段起点的锚,裸标签会淹没在正文里。
|
|
144
|
+
- 每个问题的受影响位置合并进 `证据`,不再单列「位置」行。`证据` 写成不带值的 `- **证据**` 后接子项列表,一个受影响 `file:line` 一条子项,不得用 `;` 把多个位置堆进一行,也不得只写概括性描述。
|
|
131
145
|
- 没有 `DOC-*` 自动修复时省略“自动修复”区。
|
|
132
146
|
- 没有 `CHK-*` 时省略“主路径问题”区;没有 `FBK-*` 时省略“兜底问题”区。
|
|
133
147
|
- 存在未处置 `CHK-*` 或 `FBK-*` 时展示“修复批次”,并只在报告末尾提供一次处置选择,不再逐项提问。
|
|
@@ -221,24 +221,29 @@ cp -r <target>/.agents/skills/trellis-<X> <skill-garden>/.trellis/0.6/.agents/sk
|
|
|
221
221
|
```markdown
|
|
222
222
|
✓ 已创建 trellis 入口:<name>
|
|
223
223
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
224
|
+
- **形态**:<command | skill>
|
|
225
|
+
- **范围**:<本项目 | 本项目 + skill-garden 0.6>
|
|
226
|
+
|
|
227
|
+
### 副本
|
|
228
|
+
|
|
229
|
+
- `<target>/.claude/<path>`
|
|
230
|
+
- `<target>/.agents/skills/trellis-<X>/SKILL.md`
|
|
231
|
+
- `<skill-garden>/.trellis/0.6/` 同步位置 × 2(仅 skill 形态时显示)
|
|
232
|
+
|
|
233
|
+
### 触发方式
|
|
234
|
+
|
|
235
|
+
- **自然语**:<触发词例子>
|
|
236
|
+
- **显式**:<`/trellis:<X>` 或 `/trellis-<X>`>
|
|
237
|
+
|
|
238
|
+
### 下一步建议
|
|
239
|
+
|
|
240
|
+
- 在当前对话试一次触发,观察 Claude 是否正确路由
|
|
241
|
+
- 触发失败时调整 description(精准化 when/exclusion)
|
|
242
|
+
- 内容有遗漏时补充 Step 或 checklist
|
|
240
243
|
```
|
|
241
244
|
|
|
245
|
+
字段行与分组条目必须使用 Markdown 列表项。`•` 是普通字符,Markdown 不识别,缩进两格也不构成代码块,整块会折叠成一段;不得用 `•` 或裸段落行代替列表。
|
|
246
|
+
|
|
242
247
|
---
|
|
243
248
|
|
|
244
249
|
## 命名约定
|
|
@@ -58,8 +58,8 @@ description: "按需读取当前 Trellis 任务与实际 git diff,生成对话
|
|
|
58
58
|
- <不属于本轮任务或无法判断的 dirty 文件;如无则写“无”>
|
|
59
59
|
|
|
60
60
|
### 验证状态
|
|
61
|
-
-
|
|
62
|
-
-
|
|
61
|
+
- **已看到**:<从对话、任务文档或命令输出能确认的验证>
|
|
62
|
+
- **未确认**:<没有证据的检查,不要假装已跑>
|
|
63
63
|
|
|
64
64
|
### 注意点
|
|
65
65
|
- <风险、需要人工重点看的点;如无则写“无明显风险”>
|
|
@@ -13,7 +13,7 @@ description: "按确认的精确文件范围提交普通变更或完成已就绪
|
|
|
13
13
|
- 普通多仓计划可以包含本地确定性生成命令;生成后没有新增计划外文件时沿用同一次确认。
|
|
14
14
|
- 普通模式把当前任务产物与更新后的 `task.json` 纳入同一次确认下的独立任务记录提交。
|
|
15
15
|
- 用户明确要求“只提交不推送”时使用 `commit-only`。
|
|
16
|
-
- auto-loop 可调用内部 `commit-only`,复用本 skill 的仓库发现、动态多仓计划、确定性本地生成、精确提交和失败保留能力;不再次确认、不 push,也不执行 Step 5 的任务进度写入、进度 commit 或 progress push。Auto-Loop runner 仍按自己的状态契约写入本地 `task.json.progress
|
|
16
|
+
- auto-loop 可调用内部 `commit-only`,复用本 skill 的仓库发现、动态多仓计划、确定性本地生成、精确提交和失败保留能力;不再次确认、不 push,也不执行 Step 5 的任务进度写入、进度 commit 或 progress push。Auto-Loop runner 仍按自己的状态契约写入本地 `task.json.progress` 与本地完成态(`status=completed` + `completedAt`)。
|
|
17
17
|
- 不发起、终止或解决分支合并;只允许普通模式完成已经开始、冲突已清零且索引完全可归属的 merge commit。
|
|
18
18
|
- 不处理上线核对、任务归档、会话日志或自动任务队列状态。
|
|
19
19
|
- 不使用 `git add .`、`git add -A`,不要求工作区整体干净,也不提交计划外文件。
|
|
@@ -25,7 +25,7 @@ description: "按确认的精确文件范围提交普通变更或完成已就绪
|
|
|
25
25
|
| --- | --- | --- | --- |
|
|
26
26
|
| 普通 | 展示最小计划并确认一次 | exact commit;已有 merge 就绪时完成双父提交;然后 push | 有活动任务时立即同步 |
|
|
27
27
|
| 用户 `commit-only` | 展示最小计划并确认一次 | exact local commit | 跳过 |
|
|
28
|
-
| auto-loop 内部 `commit-only` | 复用 auto-loop 预授权 | exact local commit chain | 由 Auto-Loop runner 写本地 progress
|
|
28
|
+
| auto-loop 内部 `commit-only` | 复用 auto-loop 预授权 | exact local commit chain | 由 Auto-Loop runner 写本地 progress 与本地完成态;本 skill 跳过 Step 5 |
|
|
29
29
|
|
|
30
30
|
内部 `commit-only` 不接受超出当前任务证据、runner owned dirty 和 protected-retained 边界的文件,不执行远端推送或其他附加动作。安全条件不满足时返回失败,由调用方决定后续状态。
|
|
31
31
|
|
|
@@ -132,25 +132,25 @@ auto-loop 内部 `commit-only` 也允许 retained dirty 存在,但每个生成
|
|
|
132
132
|
## Trellis Push 计划
|
|
133
133
|
|
|
134
134
|
[<PUSH / PUSH · MERGE / COMMIT-ONLY>] <N> 个仓库 · <N> 个 commit · <N> 个文件 · 保留未提交 <N> · 风险 <N>
|
|
135
|
-
|
|
136
|
-
|
|
135
|
+
|
|
136
|
+
- **工作**:<任务名 | `Untracked work: <work-id>` | 无活动任务>
|
|
137
|
+
- **顺序**:<repo-a> [-> `<local generation command>`] -> <repo-b> [-> task progress]
|
|
137
138
|
|
|
138
139
|
### 完成链证据
|
|
139
|
-
- Check-All
|
|
140
|
-
- Update-Spec
|
|
140
|
+
- **Check-All**:<通过 / 通过(已接受风险:CHK-001,FBK-002) / 未运行 / 已失效 / 存在未处置 findings / blocked / 部分验证>
|
|
141
|
+
- **Update-Spec**:<no-op / written / needs-review / 未运行 / 已失效>
|
|
141
142
|
|
|
142
143
|
### 1. <repository-name>
|
|
143
144
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
145
|
+
- **Message**:`<commit message>`
|
|
146
|
+
- **分支**:`<branch>` -> `<upstream>`
|
|
147
|
+
- **变更**:<N> 个文件 · `+<adds> -<deletes>`
|
|
148
|
+
- **父提交**:`<pre-merge-head>` + `<merge-head>`(仅已有 merge 时显示)
|
|
149
|
+
- **Push**:<执行 / 跳过(commit-only)>
|
|
148
150
|
|
|
149
151
|
计划提交:
|
|
150
152
|
- <exact files 或分组摘要>
|
|
151
153
|
|
|
152
|
-
Push:<执行 / 跳过(commit-only)>
|
|
153
|
-
|
|
154
154
|
[生成(多仓需要时显示):前置仓成功后,在 `<working-directory>` 运行 `<exact local command>`;预计只影响 <后续仓 exact files 或分组摘要>]
|
|
155
155
|
|
|
156
156
|
### 保留未提交的变更(dirty,仅数量大于 0 时显示)
|
|
@@ -161,17 +161,21 @@ Push:<执行 / 跳过(commit-only)>
|
|
|
161
161
|
### 风险(仅数量大于 0 时显示)
|
|
162
162
|
- <Check-All / Update-Spec 风险,或 unknown ahead / branch-upstream / attribution risk>
|
|
163
163
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
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>
|
|
169
171
|
|
|
170
172
|
确认执行请回复 `确认`。可调整:`只提交`、`修改 message`、`展开文件`。
|
|
171
173
|
```
|
|
172
174
|
|
|
173
175
|
展示规则:
|
|
174
176
|
|
|
177
|
+
- 计划与结果模板中的字段行必须使用 `- **字段**:值` 列表项。这些行在 Markdown 段落内会被折叠成一段,不得改回裸段落行,也不得依赖行尾空格换行。
|
|
178
|
+
- 「任务记录」是与各仓库区平级的独立 `###` 小节,仅普通模式且存在活动任务时整节展示;不再用方括号条件行代替小节标题。
|
|
175
179
|
- 单仓 `planned` 不超过 8 个文件时完整列出。
|
|
176
180
|
- 超过 8 个时按目录归组,最多 12 行;用户要求展开时展示同一 exact set。
|
|
177
181
|
- 顶部仓库/commit/file 总数包含独立任务记录提交所在 Git root、该提交及其 exact files;任务记录文件使用相同的 8 文件展示阈值和展开规则。
|
|
@@ -276,7 +280,7 @@ python3 ./.trellis/scripts/task_progress.py write \
|
|
|
276
280
|
--json
|
|
277
281
|
```
|
|
278
282
|
|
|
279
|
-
部分成功时调用同一 helper,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git
|
|
283
|
+
部分成功时调用同一 helper,并写入精确恢复位置。用户 `commit-only`、auto-loop 内部 `commit-only` 和尚未发生任何成功业务 Git 动作的失败都不得由本 skill 请求 complete;auto-loop 的本地完成态由 Auto-Loop runner 自己写入,不经过本步骤。helper 写入失败时任务保持原状态,不得继续任务进度提交或报告完成。
|
|
280
284
|
|
|
281
285
|
然后只提交并推送首次确认的当前任务 exact files;该集合包含 helper 更新后的 `task.json`,以及首次计划时已存在且可归属的当前任务 dirty/untracked 产物:
|
|
282
286
|
|
|
@@ -313,18 +317,17 @@ untracked 的全部已确认 Git 动作成功后,最后运行 `python3 ./.trel
|
|
|
313
317
|
|
|
314
318
|
### 1. <repository-name>
|
|
315
319
|
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
[生成:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>]
|
|
320
|
+
- **Commit**:`<short-hash> <actual commit message>`
|
|
321
|
+
- **分支**:`<branch>` -> `<upstream>`
|
|
322
|
+
- **状态**:<✓ 已推送 / · 仅本地提交 / ❌ 失败>
|
|
323
|
+
- **生成**:`<exact local command>` · <✓ 已完成 / ❌ 失败 / · 未执行>(仅多仓需要时显示)
|
|
321
324
|
|
|
322
325
|
### 任务进度
|
|
323
326
|
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
327
|
+
- **状态**:<✓ 已同步并进入 completed · `<progress-hash>` / ✓ partial 已同步且保持 in_progress / · 已跳过 / ❌ 同步失败,不得报告完成>
|
|
328
|
+
- **记录**:<N> 个当前任务文件
|
|
329
|
+
- **进度**:completed=<...> | partial=<...> | next=<...>
|
|
330
|
+
- **失败原因**:<原因和恢复动作>(仅失败时显示)
|
|
328
331
|
|
|
329
332
|
### 保留未提交的变更(dirty,仅存在时显示)
|
|
330
333
|
- [untracked] <path>
|
|
@@ -237,14 +237,13 @@ Active task: <task path from task.py current>
|
|
|
237
237
|
|
|
238
238
|
### 输出模板
|
|
239
239
|
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
[已写入 session runtime route state:`.trellis/.runtime/sessions/<context-key>.json` 的 `route_decisions`。]
|
|
246
|
-
[仅当本消息刚展示 route 选项并等待用户回答时:用户下一条紧邻裸数字回复才可按本 target 解释;摘要、历史消息或旧 target 的裸数字无效。]
|
|
240
|
+
````markdown
|
|
241
|
+
- **路由决定**:<inline/subagent> <implement | check-all>
|
|
242
|
+
- **来源**:<个人 route 配置 `.trellis/.route-prefs.tmp` (<key>=<value>) | auto-loop 临时授权 `.trellis/.runtime/auto-loop/<run-id>.json` | session runtime state `.trellis/.runtime/sessions/<context-key>.json` 的 `route_decisions`>
|
|
243
|
+
- **已写入**:`.trellis/.runtime/sessions/<context-key>.json` 的 `route_decisions`
|
|
244
|
+
- **裸数字有效性**:用户下一条紧邻裸数字回复才可按本 target 解释;摘要、历史消息或旧 target 的裸数字无效
|
|
247
245
|
|
|
246
|
+
```yaml
|
|
248
247
|
route_decision:
|
|
249
248
|
target: <implement | check>
|
|
250
249
|
mode: <inline | subagent | check-all-inline | check-all-subagent>
|
|
@@ -252,6 +251,7 @@ route_decision:
|
|
|
252
251
|
scope: <task | untracked>
|
|
253
252
|
task: <current task path; task only>
|
|
254
253
|
work_id: <current untracked work id; untracked only>
|
|
254
|
+
```
|
|
255
255
|
|
|
256
256
|
接下来主 agent 应当:
|
|
257
257
|
- <路由表里对应的工具调用形式>
|
|
@@ -259,9 +259,11 @@ route_decision:
|
|
|
259
259
|
|
|
260
260
|
不要:
|
|
261
261
|
- <要避免的工具调用>
|
|
262
|
-
|
|
262
|
+
````
|
|
263
|
+
|
|
264
|
+
字段行必须使用 `- **字段**:值` 列表项;裸段落行会在渲染时折叠成一段,不得改回。`route_decision` 必须放在 ```yaml 代码块内,靠代码块保留缩进结构,不得裸写。
|
|
263
265
|
|
|
264
|
-
|
|
266
|
+
条件字段按命中情况出现:`来源` 只在命中个人配置、auto-loop 临时授权或 session runtime state 时显示,三者互斥取实际命中项;`已写入` 只在写入 runtime state 成功时显示;`裸数字有效性` 只在本消息刚展示 route 选项并等待用户回答时显示;“跳过编译”段只在 implement subagent + skip_compile=true 时附加。`route_decision` 必须保留在回复中,并至少保留 target/mode/source/scope/task;需要 path/decided_at 等诊断字段时重新调用 helper 并加 `--verbose`。compact summary 若只有自然语言描述,后续 agent 仍应优先读取 runtime state,而不是把 summary 当证据。
|
|
265
267
|
|
|
266
268
|
---
|
|
267
269
|
|
|
@@ -149,18 +149,18 @@ Playbook 内容范围(**跨任务可复用的环境常量**,不含具体场
|
|
|
149
149
|
|
|
150
150
|
```markdown
|
|
151
151
|
#### Sx: <场景名>
|
|
152
|
-
- Path
|
|
153
|
-
- Pre
|
|
154
|
-
- Act
|
|
152
|
+
- **Path**: <UI/API/DB/跨层>
|
|
153
|
+
- **Pre**: <基线>(从 DB 查到的 Before)
|
|
154
|
+
- **Act**:
|
|
155
155
|
- UI: 浏览器驱动动作(snapshot → click/type → wait)
|
|
156
156
|
- API: curl 带 header 调接口
|
|
157
157
|
- DB: 用 DB 客户端预改数据(仅当场景要求,如临时改状态模拟某前置条件)
|
|
158
|
-
- Expect
|
|
158
|
+
- **Expect**:
|
|
159
159
|
- UI: 截图 / 文本快照 / Toast 观测
|
|
160
160
|
- API: 返回体 code/msg 匹配
|
|
161
161
|
- DB: 字段变化 + 审计/日志条目新增
|
|
162
|
-
- Result
|
|
163
|
-
- Restore
|
|
162
|
+
- **Result**: ✅ / ❌ + 差异说明
|
|
163
|
+
- **Restore**: <必要的 UPDATE 恢复现场>
|
|
164
164
|
```
|
|
165
165
|
|
|
166
166
|
**UI 细节**:
|
|
@@ -271,18 +271,18 @@ Playbook 内容范围(**跨任务可复用的环境常量**,不含具体场
|
|
|
271
271
|
| S3 | 跨层 | ... | ❌:<差异说明> |
|
|
272
272
|
|
|
273
273
|
### 覆盖统计
|
|
274
|
-
-
|
|
275
|
-
-
|
|
276
|
-
-
|
|
274
|
+
- **通过**:X / 总 N
|
|
275
|
+
- **失败**:Y(需修复)
|
|
276
|
+
- **跳过**:Z(未具备前置条件)
|
|
277
277
|
|
|
278
278
|
### 数据影响
|
|
279
|
-
-
|
|
280
|
-
-
|
|
281
|
-
-
|
|
279
|
+
- **已恢复**:<N 条 / 涉及表>
|
|
280
|
+
- **未恢复 / 不可逆**:<如果有>
|
|
281
|
+
- **需用户善后**:<如果有>
|
|
282
282
|
|
|
283
283
|
### Playbook 同步
|
|
284
|
-
-
|
|
285
|
-
-
|
|
284
|
+
- **写入条目**:<M 条 / 文件路径>(或"N 条新发现未沉淀(用户跳过)",或"无变化")
|
|
285
|
+
- **未解决冲突**:<如果有,注明待用户裁决的项>
|
|
286
286
|
|
|
287
287
|
### 建议下一步
|
|
288
288
|
- <根据失败/跳过场景的具体建议>
|
|
@@ -109,19 +109,17 @@ Phase 1.4 review 前:
|
|
|
109
109
|
已按你对当前 Brief 的明确预授权完成复核;范围未扩大、无未解决问题,继续启动任务。
|
|
110
110
|
```
|
|
111
111
|
|
|
112
|
-
任务已经是 `in_progress` 时,如果 brief 存在,进入 implement route
|
|
112
|
+
任务已经是 `in_progress` 时,如果 brief 存在,进入 implement route 前复用同样的完整展示:
|
|
113
113
|
|
|
114
114
|
```markdown
|
|
115
|
-
当前任务 brief
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
验收:<不失真的压缩要点>
|
|
119
|
-
完整摘要:<task>/brief.md
|
|
115
|
+
当前任务 brief:<task>/brief.md
|
|
116
|
+
|
|
117
|
+
<brief.md 正文>
|
|
120
118
|
|
|
121
119
|
下一步:进入 `trellis-route(implement)`。
|
|
122
120
|
```
|
|
123
121
|
|
|
124
|
-
|
|
122
|
+
三个展示场景都完整展示 `brief.md` 正文,不压缩、不摘录、不改写字段结构。压缩重述会丢掉 Non-Goals、关键决定或验收条件中影响实现判断的内容,因此不再使用。
|
|
125
123
|
|
|
126
124
|
## 不要做
|
|
127
125
|
|
|
@@ -121,10 +121,10 @@ description: "把架构、流程、业务逻辑、状态流转和旧 UML / 活
|
|
|
121
121
|
- PNG:`doc/visualize/<slug>.png`(如已生成)
|
|
122
122
|
|
|
123
123
|
### 图模型
|
|
124
|
-
-
|
|
125
|
-
-
|
|
126
|
-
-
|
|
127
|
-
-
|
|
124
|
+
- **输出语言**:<中文 / English / 用户指定语言;技术 token 保留原文>
|
|
125
|
+
- **主体**:<角色 / 系统 / 组件>
|
|
126
|
+
- **关系**:<调用 / 流转 / 判定 / 异常>
|
|
127
|
+
- **边界**:<系统边界 / 阶段 / 权限>
|
|
128
128
|
|
|
129
129
|
### 关键说明
|
|
130
130
|
- <关键节点或路径>
|