flower-trellis 0.5.1 → 0.5.2-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 (110) hide show
  1. package/README.md +59 -4
  2. package/enhancements/0.6/.agents/skills/trellis-auto-loop/SKILL.md +1 -1
  3. package/enhancements/0.6/.agents/skills/trellis-check-all/SKILL.md +67 -373
  4. package/enhancements/0.6/.agents/skills/trellis-check-all/references/depth-routing.md +100 -0
  5. package/enhancements/0.6/.agents/skills/trellis-check-all/references/document-drift-auto-remediation.md +74 -0
  6. package/enhancements/0.6/.agents/skills/trellis-check-all/references/full-profile.md +130 -0
  7. package/enhancements/0.6/.agents/skills/trellis-check-all/references/light-profile.md +71 -0
  8. package/enhancements/0.6/.agents/skills/trellis-check-all/references/reporting-and-disposition.md +174 -0
  9. package/enhancements/0.6/.agents/skills/trellis-push/SKILL.md +1 -1
  10. package/enhancements/0.6/.agents/skills/trellis-route/SKILL.md +6 -6
  11. package/enhancements/0.6/.claude/skills/trellis-auto-loop/SKILL.md +1 -1
  12. package/enhancements/0.6/.claude/skills/trellis-check-all/SKILL.md +67 -373
  13. package/enhancements/0.6/.claude/skills/trellis-check-all/references/depth-routing.md +100 -0
  14. package/enhancements/0.6/.claude/skills/trellis-check-all/references/document-drift-auto-remediation.md +74 -0
  15. package/enhancements/0.6/.claude/skills/trellis-check-all/references/full-profile.md +130 -0
  16. package/enhancements/0.6/.claude/skills/trellis-check-all/references/light-profile.md +71 -0
  17. package/enhancements/0.6/.claude/skills/trellis-check-all/references/reporting-and-disposition.md +174 -0
  18. package/enhancements/0.6/.claude/skills/trellis-push/SKILL.md +1 -1
  19. package/enhancements/0.6/.claude/skills/trellis-route/SKILL.md +6 -6
  20. package/enhancements/0.6/overrides/conflicts.json +1 -1
  21. package/enhancements/0.6/overrides/patches/workflow/phase-ownership/phase-2-check-content.md +1 -1
  22. package/enhancements/0.6/scripts/auto_loop.py +259 -5
  23. package/enhancements/MANIFEST.json +2 -2
  24. package/package.json +11 -4
  25. package/src/builtin-marketplaces/rd-guide.json +18 -0
  26. package/src/builtin-plugins/flower-plugin-author/plugin.json +21 -0
  27. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/SKILL.md +43 -0
  28. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/capabilities.md +9 -0
  29. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/ci-and-review.md +23 -0
  30. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/external-formats.md +17 -0
  31. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/github-release.md +19 -0
  32. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/gitlab-release.md +9 -0
  33. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/manifest.md +14 -0
  34. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/marketplace.md +11 -0
  35. package/src/builtin-plugins/flower-plugin-author/skills/flower-plugin-author/references/patches.md +7 -0
  36. package/src/builtin-plugins/skill-garden/content-adapter.js +389 -0
  37. package/src/builtin-plugins/skill-garden/payload.marker +1 -0
  38. package/src/builtin-plugins/skill-garden/plugin.json +30 -0
  39. package/src/builtin-plugins/skill-garden/provider.js +269 -0
  40. package/src/builtin-plugins/skill-garden/runtime.js +69 -0
  41. package/src/builtin-plugins/skill-garden/uninstall.js +129 -0
  42. package/src/cli.js +13 -5
  43. package/src/commands/init.js +12 -2
  44. package/src/commands/plugin-interactive.js +1338 -0
  45. package/src/commands/plugin-manager-prompt.js +284 -0
  46. package/src/commands/plugin-remote.js +572 -0
  47. package/src/commands/plugin.js +837 -0
  48. package/src/commands/uninstall.js +28 -64
  49. package/src/commands/update-check.js +3 -1
  50. package/src/commands/update.js +32 -9
  51. package/src/constants.js +20 -15
  52. package/src/lib/apply-enhancements.js +33 -224
  53. package/src/lib/cli-args.js +12 -0
  54. package/src/lib/manifest.js +164 -33
  55. package/src/lib/self-check.js +23 -6
  56. package/src/lib/skill-catalog.js +46 -1
  57. package/src/lib/update-check.js +2 -1
  58. package/src/plugin/application-service.js +748 -0
  59. package/src/plugin/auth/credential-store.js +126 -0
  60. package/src/plugin/auth/gitlab-oauth.js +447 -0
  61. package/src/plugin/auth/keyring-credential-store.js +136 -0
  62. package/src/plugin/auth/memory-credential-store.js +44 -0
  63. package/src/plugin/authoring/args.js +90 -0
  64. package/src/plugin/authoring/scaffold.js +385 -0
  65. package/src/plugin/authoring/templates/rd-guide/CODEOWNERS +2 -0
  66. package/src/plugin/authoring/templates/rd-guide/gitlab-ci.yml +10 -0
  67. package/src/plugin/authoring/templates/rd-guide/verify-integration-review.mjs +23 -0
  68. package/src/plugin/authoring/validator.js +369 -0
  69. package/src/plugin/capabilities/approval-digest.js +90 -0
  70. package/src/plugin/capabilities/builtin-trust.js +73 -0
  71. package/src/plugin/capabilities/errors.js +25 -0
  72. package/src/plugin/capabilities/policy-engine.js +203 -0
  73. package/src/plugin/capabilities/profiles.js +92 -0
  74. package/src/plugin/contracts.js +261 -0
  75. package/src/plugin/errors.js +102 -0
  76. package/src/plugin/formats/adapters.js +210 -0
  77. package/src/plugin/formats/constants.js +10 -0
  78. package/src/plugin/formats/marketplace.js +92 -0
  79. package/src/plugin/formats/normalized-package.js +282 -0
  80. package/src/plugin/formats/registry.js +99 -0
  81. package/src/plugin/formats/shared.js +99 -0
  82. package/src/plugin/github/rest-client.js +154 -0
  83. package/src/plugin/gitlab/rest-client.js +167 -0
  84. package/src/plugin/install/content-hash.js +52 -0
  85. package/src/plugin/install/content-projector.js +279 -0
  86. package/src/plugin/install/install-planner.js +152 -0
  87. package/src/plugin/install/patch-planner.js +592 -0
  88. package/src/plugin/install/platform-detector.js +67 -0
  89. package/src/plugin/install/transaction-writer.js +522 -0
  90. package/src/plugin/integrity/canonical-json.js +82 -0
  91. package/src/plugin/integrity/canonical-tree.js +121 -0
  92. package/src/plugin/resolver/dependency-resolver.js +311 -0
  93. package/src/plugin/resolver/lock-builder.js +25 -0
  94. package/src/plugin/runtime-errors.js +45 -0
  95. package/src/plugin/runtime-extensions.js +83 -0
  96. package/src/plugin/schemas/marketplace-manifest.js +135 -0
  97. package/src/plugin/schemas/plugin-manifest.js +91 -0
  98. package/src/plugin/schemas/project-files.js +370 -0
  99. package/src/plugin/schemas/shared.js +187 -0
  100. package/src/plugin/schemas/validator.js +79 -0
  101. package/src/plugin/sources/builtin-provider.js +86 -0
  102. package/src/plugin/sources/github-provider.js +681 -0
  103. package/src/plugin/sources/gitlab-provider.js +444 -0
  104. package/src/plugin/sources/local-provider.js +113 -0
  105. package/src/plugin/sources/package-reader.js +193 -0
  106. package/src/plugin/sources/remote-archive.js +130 -0
  107. package/src/plugin/sources/source-registry.js +95 -0
  108. package/src/plugin/sources/user-source-store.js +391 -0
  109. package/src/plugin/stable-order.js +10 -0
  110. package/src/plugin/state/project-store.js +346 -0
package/README.md CHANGED
@@ -64,9 +64,6 @@ flower-trellis self-update --target . --yes
64
64
  # 管理启动更新检查策略
65
65
  flower-trellis update-check get --target .
66
66
 
67
- # 交互管理通用技能,并查看工作流强化包
68
- flower-trellis skill
69
-
70
67
  # 卸载:移除 Trellis 本体并清理强化包残留
71
68
  flower-trellis uninstall
72
69
 
@@ -85,7 +82,7 @@ flower-trellis -v
85
82
  | `self-check` | 输出启动更新检查 JSON,供 Codex / Claude Code hook 和 AI 自动化读取 |
86
83
  | `self-update` | 受控升级 flower-trellis 并对目标项目执行完整 `flower-trellis update` 重叠加 |
87
84
  | `update-check` | 管理 `.trellis/.flower-manifest.json` 内的启动更新检查策略 |
88
- | `skill` | 打开交互菜单:启用或停用通用技能,只读查看工作流强化包 |
85
+ | `plugin` | 管理 Flower Plugin、Marketplace 来源、GitLab 授权和作者校验 |
89
86
  | `uninstall` | 移除 Trellis 本体并清理强化包残留(支持 `-y` / `--dry-run`) |
90
87
  | `<其它命令>` | 原样透传给 Trellis,覆盖其现有及未来子命令 |
91
88
  | `-v` / `-h` | 打印版本 / 帮助 |
@@ -104,6 +101,64 @@ flower-trellis -v
104
101
 
105
102
  未指定平台时,交互模式会弹出多选菜单(默认勾选 Claude Code + Codex);也可直接传 `--claude` / `--codex` / `--cursor` / `--devin` / `--zcode` / `--trae` 等指定,或用 `-y` 跳过菜单。`--windsurf` 仍作为 Devin 的旧别名透传给 Trellis。其余未识别的 flag(如 `-u`、`-f`、`--template`、`--with-statusline`)一律透传给 Trellis。
106
103
 
104
+ ## Flower Plugin
105
+
106
+ Flower Plugin 是 flower-trellis 的标准运行时格式。GitHub 公共仓库可自动识别 Flower、Codex、Claude Code 与 Skill-only 包,并先规范化为标准 Flower package,再进入同一套来源解析、依赖锁定、能力校验、内容投影、事务写入和卸载所有权。外部 `skills/` 与 Claude legacy `commands/*.md` 可导入;hooks、agents、MCP、LSP、monitor、bin、settings、themes、output styles 和 apps 只展示兼容性诊断,不会执行。
107
+
108
+ 完整 `flower-trellis init` 会安装 Trellis,并默认声明和应用内置 `flower/skill-garden`。普通用户只需打开 Plugin 管理器:
109
+
110
+ ```bash
111
+ flower-trellis plugin
112
+ ```
113
+
114
+ 交互管理器采用 `发现 / 已安装 / 来源 / 问题` 四个页签。Trellis 项目的 `发现` 页会展示 `flower/skill-garden` 内置入口,按 Enter 直接管理工作流强化与可选通用技能;原 `flower-trellis skill` 命令继续保留为高级兼容入口。`发现` 同时合并全部已启用来源的 Plugin,并保留来源标签和即时搜索;未登录 GitLab 来源会直接进入 Device Flow,GitHub 公共来源无需登录。`来源` 页的“新增来源”可选择 GitHub 公共仓库或 GitLab Marketplace;GitHub 会先在临时缓存中下载固定快照、检测格式、展示可导入与忽略组件,确认后才保存。ref 留空时使用仓库默认分支;出现多个格式入口时会要求选择,公开 GitHub 跨仓 Marketplace 条目和 `plugins/*` 多 Plugin 仓库也可识别。
115
+
116
+ 安装、更新和卸载都会先展示 dry-run、依赖、capability 和目标文件变化,确认后才写入项目。Plugin 作者使用的 `plugin init`、`plugin validate` 继续保留在高级命令中,不占用普通用户的管理器首页。
117
+
118
+ 独立的 `plugin add` 只建立最小 Plugin Runtime,安装目标 Plugin 及其显式依赖,不会隐式安装 `skill-garden`,因此交互管理器也可以在没有 `.trellis/` 的普通项目中使用。
119
+
120
+ 项目状态分为可提交期望与本机应用结果:
121
+
122
+ | 路径 | 边界 |
123
+ |------|------|
124
+ | `.flower/plugins.json` | 可提交;只记录用户直接声明的 Plugin |
125
+ | `.flower/plugin-lock.json` | 可提交;记录固定版本、完整依赖图、来源与完整性摘要 |
126
+ | `.flower/state.json` | 本机;记录实际平台、生成路径、ownership 与 Patch provenance |
127
+ | `.flower/cache/`、`.flower/transactions/` | 本机;可清理缓存与事务恢复证据 |
128
+
129
+ `rd-guide` 是随包预注册、默认启用但惰性访问的 GitLab Marketplace。打开管理器后,`发现` 页会在已有凭据时读取远程目录;未登录时只展示授权入口,不会尝试读取仓库内容。普通交互默认使用 Device Flow,PKCE 浏览器登录保留为来源详情中的高级选项。OAuth 只申请 `read_api read_repository`,Application Secret 和 token 都不会写入项目文件。
130
+
131
+ GitHub 首版只支持 `github.com` 公共仓库和匿名 REST,不保存 PAT 或其它凭据。来源会固定确认后的格式入口;安装 lock 固定完整 commit 与 canonical digest,通过 Marketplace 发现时还会固定索引仓库和索引 commit。匿名 API 可能受每小时 60 次/IP 的主要限额影响,限流会显示为 GitHub 诊断,不会转成登录提示。
132
+
133
+ 能力分为 `standard`、`integration`、`system`:外部 Plugin 不能获得 `system`;`integration` 的首次 Patch 需要项目确认,批准摘要随锁文件冻结,版本、内容或权限变化后必须重新确认。所有 Patch 在统一 preflight 后进入事务 writer,任一 required operation 失败都应保持零写入。
134
+
135
+ ### 高级与自动化接口
136
+
137
+ 显式子命令主要供 CI、高级调试和不可交互环境使用。完整参数以 `flower-trellis plugin --help` 为准:
138
+
139
+ ```bash
140
+ flower-trellis plugin list --json
141
+ flower-trellis plugin add local/example --source plugins/example --platform codex
142
+ flower-trellis plugin verify local/example --json
143
+ flower-trellis plugin update local/example --dry-run --json
144
+ flower-trellis plugin remove local/example --dry-run --json
145
+ flower-trellis plugin source list --json
146
+ flower-trellis plugin source add public-guides --type github --repo owner/repository --ref main --format auto --json
147
+ flower-trellis plugin auth login rd-guide
148
+ flower-trellis plugin search --source rd-guide --json
149
+ flower-trellis plugin add rd-guide/example --platform codex --dry-run --json
150
+ ```
151
+
152
+ 维护 Plugin 或 Marketplace 时使用高级作者命令;这些命令复用 Runtime 的 manifest、完整性、依赖和 capability 真源:
153
+
154
+ ```bash
155
+ flower-trellis plugin init --id rd-guide/example --name "示例规范" --profile standard --non-interactive
156
+ flower-trellis plugin validate .flower-plugin --subject plugin --json
157
+ flower-trellis plugin add flower/flower-plugin-author --platform codex --json
158
+ ```
159
+
160
+ 旧 `.trellis/.flower-manifest.json` 只作为迁移证据读取。下一次完整 init/update 会把期望、锁定和本机状态迁移到 `.flower/`,保留旧文件供核对;普通 `flower-trellis update` 重放已锁定版本,只有显式 `plugin update` 才解析外部 Plugin 新版本。
161
+
107
162
  ### 升级备份保留
108
163
 
109
164
  上游 `trellis update` 会在写入前创建 `.trellis/.backup-<timestamp>/` 完整快照。
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: trellis-auto-loop
3
- description: "启动、恢复和推进 Trellis 自动任务循环。用于用户明确要求 auto loop、自动跑任务、/goal 类似流程、一次跑多个任务、继续自动 run、查看/停止 auto-loop,或压缩恢复后需要从 .trellis/scripts/auto_loop.py 读取下一步。"
3
+ description: "启动、恢复和推进 Trellis 自动任务循环。用于用户明确要求 auto loop、自动跑任务、/goal 类似流程、一次跑多个任务、继续自动 run、查看/停止 auto-loop,或压缩恢复后需要执行 .trellis/scripts/auto_loop.py next 获取 runner action。"
4
4
  ---
5
5
 
6
6
  # Trellis Auto Loop
@@ -1,35 +1,58 @@
1
1
  ---
2
2
  name: trellis-check-all
3
- description: "统一只读检查入口:结合任务、实际 diff、风险与运行上下文智能选择 light/full 深度,再执行规划实现、关键假设、完整性与规范审查。默认 collect-all,不在用户确认修复范围前修改代码。触发:检查、轻量检查、全面检查、提交前检查、check-all、从 PRD/三件套到代码过一遍。"
3
+ description: "统一 Check-All 入口:确认范围与运行上下文,按 requested/effective depth 选择 light/full profile,执行三件套落地、实现假设、完整性与规范审查;低风险文档漂移可自动修复并在报告中列出,其它问题 collect-all 后一次确认修复范围。触发:检查、轻量检查、全面检查、提交前检查、check-all、从 PRD/三件套到代码过一遍。"
4
4
  ---
5
- # Check All 全维度代码检查
5
+ # Check All 统一入口
6
6
 
7
- 依次检查规划正确性、实现假设、跨层完整性与规范性。默认采用 **audit-only collect-all**:先完成所有可继续的只读检查,统一报告问题,再由用户一次确认修复范围。
7
+ 本 skill 是 **薄入口**:负责范围确认、深度画像、profile 路由、文档漂移自修通道、统一问题模型和最终分流。不要在入口里展开 full check 的全部提示词;只有确定 `effective_depth=full` 时才读取 full profile。
8
8
 
9
- > 顺序:做对了 -> 假设成立 -> 做全了且写得规范。
9
+ 顺序:做对了 -> 假设成立 -> 做全了且写得规范。
10
+
11
+ ---
12
+
13
+ ## 入口职责
14
+
15
+ 1. 确认本轮检查范围、任务材料、项目规范和运行上下文。
16
+ 2. 解析 `requested_depth`,生成 `check_profile`,决定 `effective_depth=light|full`。
17
+ 3. 按有效深度读取并执行对应 profile。
18
+ 4. 全程收集普通问题到 `CHK-*`,收集低风险文档漂移到 `DOC-*`。
19
+ 5. 在最终报告前处理允许自动修复的文档漂移,并把修复内容展示在报告里。
20
+ 6. 根据 interactive / validated auto-loop 边界输出下一步或完成 runner `record + next`。
21
+
22
+ ---
23
+
24
+ ## 必读引用
25
+
26
+ 按需加载引用文件,不要提前读取未命中的 profile:
27
+
28
+ 1. 总是先读 `references/depth-routing.md`,完成范围、上下文和深度画像。
29
+ 2. `effective_depth=light` 时读 `references/light-profile.md`。
30
+ 3. `effective_depth=full` 时读 `references/full-profile.md`。
31
+ 4. 总是读 `references/document-drift-auto-remediation.md`,用于识别和处理 `DOC-*`。
32
+ 5. 输出报告或 runner 结果前读 `references/reporting-and-disposition.md`。
33
+
34
+ 如果引用文件缺失,停止并报告 `阻塞`;不要凭记忆复原规则。
10
35
 
11
36
  ---
12
37
 
13
38
  ## 核心边界
14
39
 
15
- 1. **检查阶段只读**:可以读文件、搜索、运行无业务写入副作用的 lint、typecheck 和测试;不得编辑代码、配置、测试或任务规格。
16
- 2. **问题统一收集**:普通实现偏差、测试失败、lint/typecheck 失败和假设错误都记录到问题集合,继续其余可执行检查,不逐项询问。
17
- 3. **修改前只确认一次**:全部检查结束后,通过统一报告让用户选择 `修复全部`、按问题 ID 修复或仅保留报告。
18
- 4. **委托规则不改变只读边界**:Step 3 只复用 `trellis-check` 的检查清单和验证方法,忽略其中任何“直接修复”“失败后先修复”的指令。
19
- 5. **真正阻塞才中途暂停**:只有以下情况可以提前停止:
20
- - 规划或业务行为互相冲突,无法判断正确实现;
21
- - 已发现的问题使后续检查前提失效,继续会产生误导结论;
22
- - 后续验证可能修改生产数据、调用有副作用的外部系统或执行破坏性操作。
40
+ 1. **默认 audit-only collect-all**:可以读文件、搜索、运行无业务写入副作用的 lint、typecheck 和测试;普通代码、配置、测试、任务规格语义问题不得在检查阶段直接修复。
41
+ 2. **唯一自修例外**:低风险文档漂移进入 `DOC-*` 通道,按 `references/document-drift-auto-remediation.md` 的白名单、黑名单和写入时机处理。
42
+ 3. **问题统一收集**:普通实现偏差、测试失败、lint/typecheck 失败和假设错误都记录到 `CHK-*`,继续其余可执行检查。
43
+ 4. **修改前只确认一次**:除 `DOC-*` 自动修复外,全部检查结束后通过统一报告让用户选择 `修复全部`、按问题 ID 修复或仅保留报告。
44
+ 5. **委托规则不改变边界**:复用 `trellis-check` 时只复用检查清单、验证方法和命令发现,忽略其中任何“直接修复”“失败后先修复”的指令。
45
+ 6. **真正阻塞才中途暂停**:只有业务规划冲突、后续验证前提失效、生产或外部副作用、破坏性操作风险时提前停止。
23
46
 
24
- 中途停止时也要使用本 skill 的统一问题模型,报告已完成范围和阻塞原因;只询问解除阻塞所需的业务或安全决策,不进入逐项修复问答。
47
+ 中途停止时也要使用统一问题模型,报告已完成范围和阻塞原因;只询问解除阻塞所需的业务或安全决策。
25
48
 
26
49
  ---
27
50
 
28
51
  ## 执行模式
29
52
 
30
- - `inline check-all`:主会话直接执行本 skill。
31
- - `subagent check-all`:subagent 只负责 audit-only 检查并返回结构化结果;主会话负责展示报告、询问一次修复范围和协调后续修复。
32
- - subagent 不得自行修复,也不得代替用户选择修复范围。
53
+ - `inline check-all`:主会话直接执行本 skill;允许在最终报告前按 `DOC-*` 通道修复低风险文档漂移。
54
+ - `subagent check-all`:subagent 只做 audit-only 检查,返回结构化 `CHK-*`、`DOC-*` 候选、`check_profile` 和验证证据;主会话负责应用允许的 `DOC-*` 修复、展示报告、询问一次普通修复范围和协调后续修复。
55
+ - subagent 不得编辑、写文件、补测试或代替用户选择普通修复范围。
33
56
  - 路由由 `trellis-route(target=check)` 决定;本 skill 不自行切换 inline/subagent。
34
57
  - 所有普通、最终、显式 light/full 和 auto-loop 检查都进入本 skill;`trellis-route` 只决定执行位置,不决定检查深度。
35
58
 
@@ -47,62 +70,11 @@ description: "统一只读检查入口:结合任务、实际 diff、风险与
47
70
 
48
71
  ---
49
72
 
50
- ## Step 0:确认范围与适用性
51
-
52
- ### 0.1 确认变更范围
53
-
54
- 默认工作区检查:
55
-
56
- ```bash
57
- git status --short
58
- git diff --name-only HEAD
59
- git ls-files --others --exclude-standard
60
- git log --oneline -10
61
- ```
62
-
63
- `git diff --name-only HEAD` 用于覆盖 staged + unstaged 的已跟踪文件,未跟踪文件由 `git ls-files` 补充。不能只用 `git diff --name-only` 判断“无变更”。
64
-
65
- 如果用户要求检查已经提交的 PR/分支改动,先确认目标基线,再使用 merge-base 对应的 diff 范围;`git log -10` 不能替代 PR 变更范围。
66
-
67
- 如果确认范围内确实无变更,提示用户并终止。
73
+ ## 顶层流程
68
74
 
69
- ### 0.2 读取任务与规范
75
+ ### Step 0:范围、上下文与深度画像
70
76
 
71
- 读取当前任务:
72
-
73
- - `prd.md`;没有时 Step 1 标记 `N/A`。
74
- - `design.md`(若存在)。
75
- - `implement.md`(若存在)。
76
- - `check.jsonl` 中列出的 spec/research 文件(若存在)。
77
- - 变更包对应的 `.trellis/spec/` 具体规范。
78
-
79
- 不得只依赖 session 摘要推断规划内容,必须读取实际文件。
80
-
81
- ### 0.3 验证运行上下文
82
-
83
- 默认 `context=interactive`。只有调用方声称来自 auto-loop 时,才通过 runner 的 `status` / `next` 验证以下事实:
84
-
85
- - run 为 `running`;
86
- - 当前 task 与本次检查任务一致;
87
- - outstanding action 为 `run_check_all` 或 `run_recheck`。
88
-
89
- 不得用聊天摘要、自然语言声明或直接读取 raw runtime JSON 代替 runner 验证。验证失败时不得使用 auto-loop 授权;报告失败原因,并按 interactive 边界处理。
90
-
91
- ### 0.4 解析请求深度
92
-
93
- `requested_depth` 只允许 `auto`、`light`、`full`,优先级固定为:
94
-
95
- 1. 当前用户请求里最新的显式深度意图;
96
- 2. validated auto-loop action 的 `requested_check_depth`;
97
- 3. 默认 `auto`。
98
-
99
- 显式意图按语义识别:`简单检查`、`轻量检查`、`light check` 表示 light;`全面检查`、`全量检查`、`最终检查`、`提交前检查`、`full check` 表示 full。同一请求出现多次切换时,以最后一次明确表达为准。单独说 `check` / `check-all` 只是调用统一入口,不自动等同 full。
100
-
101
- 历史 auto-loop state 缺少深度字段时,runner 会返回 `full`。不得根据文件数、diff 行数或“看起来简单”单独判定 light。
102
-
103
- ### 0.5 选择有效深度
104
-
105
- 按以下顺序生成检查画像:
77
+ 读取 `references/depth-routing.md` 并执行完整 Step 0。输出固定画像:
106
78
 
107
79
  ```yaml
108
80
  check_profile:
@@ -113,323 +85,45 @@ check_profile:
113
85
  reasons: [string]
114
86
  ```
115
87
 
116
- 决策顺序:
117
-
118
- 1. `requested=full` -> `effective=full`。
119
- 2. 命中任一 hard-full -> `effective=full`;若请求为 light,使用 `confidence=escalated` 并记录原因。
120
- 3. `requested=light` 且无 hard-full -> `effective=light`。
121
- 4. `requested=auto` 且高置信满足全部 light eligibility -> `effective=light`。
122
- 5. 其它情况 -> `effective=full`、`confidence=fallback-full`;不询问用户。
123
-
124
- **hard-full 信号**:
125
-
126
- - 复杂任务存在 design/implement,且本次变更需要完整验收映射;
127
- - 跨层、跨包、跨仓、submodule 或影响面尚未完全展开;
128
- - 公共 API、CLI、schema、持久化状态、缓存契约、迁移或历史数据兼容;
129
- - 权限、鉴权、安全、资金、并发、时序、状态机或回滚;
130
- - workflow、skill、command、hook 注入或生成快照;
131
- - 安装、升级、发布、push/commit 工作流控制面;
132
- - 正在重检既有 full `CHK-*` 修复结果;
133
- - light 执行中发现未知 dirty path、真实影响面扩大或关键验证缺口。
134
-
135
- **light eligibility 必须全部满足**:
136
-
137
- - 变更可完整归属,且集中在单一局部行为;
138
- - 无 hard-full 信号;
139
- - 受影响规划条目、直接引用点和回归路径可穷举;
140
- - 存在可运行的定向验证,或仅为无行为风险的文案、注释、局部样式;
141
- - 不在既有 full 修复/重检链中。
142
-
143
- light 执行中命中 hard-full 时,立即单向升级 full 并补齐所有适用维度;同一修复/重检循环内 full 不得降级。Step 2 各 Dimension 仍须先判断 Trigger,未命中时标记 `N/A` 并跳过。
144
-
145
- ---
146
-
147
- ## Step 1:对照规划三件套检查实现
148
-
149
- ### 1.1 验收依据
150
-
151
- - PRD Requirement / Acceptance Criteria:行为基线。
152
- - Design API、数据模型、数据流、关键决策和 rollback:技术基线。
153
- - Implement 有序步骤、review gate 和 rollback point:落地基线。
154
-
155
- light 只提取可穷举的受影响条目;full 提取所有适用条目。每条记录来源位置,实际阅读对应代码后再判断。
156
-
157
- ### 1.2 必查类型
158
-
159
- | 来源 | 可验证条目 |
160
- | --- | --- |
161
- | `prd.md` | AC、需求、业务规则、UI 文案、边界和异常场景 |
162
- | `design.md` | API 路径/方法/字段、数据模型、数据流、关键 tradeoff、rollout/rollback |
163
- | `implement.md` | 有序步骤是否落地、review gate 是否满足、rollback point 是否可用 |
164
-
165
- `implement.md` 中的 validation command 在本步骤只做静态前提核对;真实运行归 Step 3。
166
-
167
- ### 1.3 追踪方法
168
-
169
- | 条目类型 | 追踪路径 |
170
- | --- | --- |
171
- | API 行为 | Controller/Handler -> Service -> DAO/Storage |
172
- | 前端交互 | 组件 -> 事件 -> 状态管理 -> API 调用 |
173
- | 数据校验 | 前端规则 + 后端 validator/service |
174
- | UI 文案 | 组件、i18n/locale 或其它有效文案来源 |
175
- | 计算转换 | 实际 service/utility 算法及边界值 |
176
- | 状态流转 | 状态定义 + 允许的转换条件 |
177
- | Schema | DTO/类型/迁移中的字段、类型、约束和默认值 |
178
- | Implement 步骤 | 对应代码、配置、迁移或资产是否存在且可用 |
179
-
180
- 文案要求逐字一致时,对照最终有效文案来源;不要强制要求文案必须直接写在组件字面量中。
181
-
182
- ### 1.4 记录结果
183
-
184
- 发现偏差、缺失、部分实现或文案不一致时,写入统一问题集合并继续。不要在此步骤询问“先修还是继续检查”。
185
-
186
- ---
187
-
188
- ## Step 2:实现假设验证
189
-
190
- 根据实际变更选择适用 Dimension。每个适用 Dimension 都要确认源码或真实契约证据,不能凭记忆通过。
191
-
192
- ### Dimension A:API Contract
193
-
194
- **Trigger**:新增或修改已有 API 调用、请求参数或响应解析。
195
-
196
- - 读取 Controller/Handler 和 DTO/Schema,确认实际请求、响应结构。
197
- - 找到项目内同 API 或同模式调用作为参考。
198
- - 确认参数名、类型、默认值、分页字段和起始页码。
199
- - 覆盖正常、空值、零值和错误响应。
200
-
201
- ### Dimension B:Component Context
202
-
203
- **Trigger**:在 Modal、Drawer、Tab 或条件渲染容器内修改有状态组件。
204
-
205
- - 确认容器关闭或切换时是否销毁子组件。
206
- - 确认受控值、初始化值和外部状态绑定。
207
- - 确认状态保持/重置行为符合规划。
208
- - 对照项目内相同容器的既有用法。
209
-
210
- ### Dimension C:Data History
211
-
212
- **Trigger**:新增、修改或重新解释持久化字段。
213
-
214
- - 确认历史记录的新字段值和 null/零值行为。
215
- - 确认过滤、聚合和降级查询能处理历史数据。
216
- - 追踪新字段的写入来源和可靠性。
217
- - 无可用历史数据环境时标记 `部分验证` 或 `阻塞`,不得标记通过。
218
-
219
- ### Dimension D:Data Flow Trace
220
-
221
- **Trigger**:变更跨越 UI、API、Service、Storage 中的两个或更多边界。
222
-
223
- - 模拟完整请求路径和返回路径。
224
- - 确认各层参数名、类型、嵌套层级一致。
225
- - 覆盖缺省、空值、零值、特殊字符和错误传播。
226
- - 分层代码分别正确不等于整条链路正确,必须连起来核对。
227
-
228
- ### Dimension E:Verification Tests
229
-
230
- **Trigger**:Dimension A-D 任一适用。
231
-
232
- - 检查关键假设是否已有可运行的自动化测试或明确手动验证。
233
- - 优先覆盖最脆弱的参数名、嵌套结构、历史数据和空值路径。
234
- - 测试存在时实际运行;未运行不能报告通过。
235
- - 缺少测试时记录问题,等待用户确认修复范围后再新增测试。
236
-
237
- 发现假设错误时写入统一问题集合并继续其它可执行检查。只有该错误让后续检查前提失效时,才按“真正阻塞”规则暂停。
238
-
239
- ---
240
-
241
- ## Step 3:完整性、规范与项目验证
242
-
243
- 读取 `.agents/skills/trellis-check/SKILL.md`(Claude-only 项目读取对应 `.claude` 副本),复用以下内容:
244
-
245
- - 适用 spec 的读取方法;
246
- - lint、typecheck、测试等项目验证命令;
247
- - 测试覆盖、跨层数据流、复用、依赖和同层一致性检查;
248
- - debug logging、warning suppression 和类型安全绕过检查。
249
-
250
- ### Audit-Only 覆盖规则
251
-
252
- 在 Check-All 内执行时,下列 `trellis-check` 指令一律失效:
253
-
254
- - “Fix any failures before proceeding”;
255
- - “fix them directly”;
256
- - “Report and Fix”;
257
- - 任何要求检查 agent 直接编辑、补测试或反复修到通过的语句。
258
-
259
- 验证失败时记录命令、退出状态和关键错误到统一问题集合,继续其它独立验证。可能写业务数据或外部系统的验证不直接运行,按真正阻塞规则处理。
260
-
261
- ---
262
-
263
- ## 统一问题模型
264
-
265
- 每个独立根因使用固定字段:
266
-
267
- | 字段 | 规则 |
268
- | --- | --- |
269
- | ID | 首次记录时依次分配 `CHK-001`、`CHK-002`;当前修复/重检循环中不重新编号 |
270
- | 严重度 | `P0` 数据破坏/安全事故/无法安全继续;`P1` 功能错误/需求违背/发布阻塞;`P2` 测试/规范/维护性/非阻塞风险 |
271
- | 标题 | 描述根因,不用症状堆叠 |
272
- | 来源 | prd/design/implement/spec/assumption/verification |
273
- | 证据 | `file:line`、实际契约或命令结果 |
274
- | 影响 | 用户、数据或工程影响 |
275
- | 建议 | 推荐修复方式,不在检查阶段执行 |
276
- | 位置 | 同一根因的全部受影响位置 |
277
- | 验证 | 修复后的命令或手动验证步骤 |
278
-
279
- 同一根因的多个位置合并到一个问题。报告按严重度排序,但不得因此重排已经分配的 ID。新根因使用下一个 ID。
280
-
281
- ---
282
-
283
- ## 输出:统一检查报告
284
-
285
- interactive 模式完成所有可继续检查后,严格按以下顺序输出:
286
-
287
- ```markdown
288
- ## Trellis Check-All 结果
289
-
290
- [<通过/未通过/阻塞>] <N> 个维度 · <N> 个问题 · P0 <N> / P1 <N> / P2 <N> · 验证 <通过>/<总数>
291
-
292
- 任务:<任务名称或无活动任务>
293
- 范围:<文件数与层级摘要>
294
- 画像:requested=<auto/light/full> · effective=<light/full> · confidence=<high/fallback-full/escalated> · <原因摘要>
295
- 结论:<一句话结论>
296
-
297
- ### 维度结果
298
-
299
- | 维度 | 状态 | 问题 | 验证 |
300
- | --- | --- | ---: | --- |
301
- | 三件套实现 | <通过/未通过/部分验证/阻塞/N/A> | <N> | <摘要> |
302
- | 实现假设 | <通过/未通过/部分验证/阻塞/N/A> | <N> | <摘要> |
303
- | 完整性与规范 | <通过/未通过/部分验证/阻塞/N/A> | <N> | <摘要> |
304
-
305
- ### 问题清单
306
-
307
- - [ ] `CHK-001` `[P1]` <标题>
308
- - 来源:<来源>
309
- - 证据:<file:line / 契约 / 命令结果>
310
- - 影响:<影响>
311
- - 建议:<修复建议>
312
- - 位置:<全部受影响位置>
313
- - 验证:<验证命令或步骤>
314
-
315
- ### 未覆盖与风险
316
-
317
- - [<部分验证/阻塞/N/A>] <说明>
318
-
319
- ### 修复批次
320
-
321
- 批次 1:<问题 ID> · <修复目标>
322
- 修复后:定向验证 -> Check-All 重检
323
-
324
- 操作:`修复全部`、`修复 CHK-001,CHK-003`、`仅保留报告`
325
-
326
- ### 下一步
327
-
328
- <按下方 `Interactive Post-Check Stop Gate` 输出一个明确、可执行的主动作>
329
- ```
330
-
331
- 展示规则:
332
-
333
- - 没有问题时省略“问题清单”“修复批次”和操作行,只报告通过结果、验证和剩余风险。
334
- - 有问题时只在报告末尾提供一次修复范围选择,不再逐项提问。
335
- - interactive 标准报告必须以“下一步”段结束;停止等待不等于省略引导,不得只列出风险或写“等待用户选择”。
336
- - 独立问题不得因数量多而静默省略;先合并同根因重复项,再完整列出剩余问题。
337
- - 报告不得包含 commit message、拟提交/暂存文件、commit-only 决策或提交确认。
338
- - light 通过正式满足 Phase 2.2 检查门禁;未执行维度必须标记 `N/A`,不得伪装为已验证。
339
-
340
- ---
341
-
342
- ## 修复与重检
343
-
344
- 用户选择修复范围后:
345
-
346
- 1. 主会话复用当前任务已有的合法 implement route,批量修复选中的无歧义问题;不存在合法 implement route 时先进入 `trellis-route(target=implement)`,不得自行默认 inline/subagent。
347
- 2. 修复过程中不对每个问题重复确认。
348
- 3. 新增业务歧义、破坏性风险或范围扩张时才暂停,并一次性说明受影响问题。
349
- 4. 完成定向验证后复用当前 check route 重新执行 Check-All。
350
- 5. 原问题沿用 ID;新根因继续递增编号。上次 `effective_depth=full` 时,本次最小深度为 full。
351
-
352
- 修复完成后输出:
353
-
354
- ```markdown
355
- ## Trellis Check-All 修复结果
356
-
357
- [<完成/部分完成/失败>] 修复 <完成>/<计划> · 验证 <通过>/<总数> · 剩余问题 <N>
358
-
359
- | 问题 | 修复 | 验证 |
360
- | --- | --- | --- |
361
- | CHK-001 | <已修复/未修复/阻塞> | <通过/失败/未执行> |
362
-
363
- ### 未修复与风险
364
-
365
- - <问题或风险;没有时写“无”>
366
-
367
- 结论:<重检结论>
368
-
369
- ### 下一步
370
-
371
- <按下方 `Interactive Post-Check Stop Gate` 输出一个明确、可执行的主动作>
372
- ```
373
-
374
- 检查通过后的动作由下方 `Interactive Post-Check Stop Gate` 判断:普通交互停止等待,符合 direct Git 严格通过条件时同轮进入 Phase 3.3 `trellis-update-spec`,再到 Phase 3.4 `trellis-push`。仍有问题时停留在修复/重检循环。
375
-
376
- ---
377
-
378
- ## Auto-Loop Return Gate
379
-
380
- validated auto-loop 复用相同的 audit-only 检查、画像和问题模型,但不展示普通模式的修复选择:
381
-
382
- - 有问题:向 runner `record --result failed --effective-check-depth <light|full> --check-depth-reason <summary>`,摘要包含最高严重度、问题 ID、根因和受影响文件;随后立即 `next`,由 runner 进入 `run_fix`。
383
- - 真正需要用户产品决策、越权、生产副作用或破坏性安全决策:使用同样深度字段 `record --result blocked`,随后按 runner 状态停止。
384
- - 无问题:`record --result ok --effective-check-depth <light|full> --check-depth-reason <summary>`,随后立即 `next`。
385
- - subagent 只返回结构化报告和 `check_profile`;主会话收到后必须立即完成匹配 action 的 `record + next`,不得先套用 interactive 停止边界。
386
- - validated auto-loop 不渲染交互式下一步段、不提示用户回复“继续”、不等待普通修复范围选择;匹配 action 的 `record + next` 就是唯一后续动作。
387
- - 不修改 runner 的 fix/recheck 预算、commit-only 授权或队列行为。
388
-
389
- ---
390
-
391
- ## Interactive Post-Check Stop Gate
88
+ ### Step 1:读取对应 profile
392
89
 
393
- 非 validated auto-loop 先输出上述完整标准报告,再在本 Gate 内按以下顺序分流:
90
+ - `effective_depth=light`:只执行可完整穷举的受影响条目、直接引用点和定向回归路径。发现影响面无法闭合时立即升级 full。
91
+ - `effective_depth=full`:执行完整三件套映射、全部适用假设维度和完整规范验证。
394
92
 
395
- 1. 只从触发本轮完成链的最新用户消息识别 direct Git intent:明确请求普通 push,或用户主动 `commit-only`。不得从历史消息、任务标题、摘要、dirty 状态或 auto-loop 内部 action 推断。
396
- 2. direct Git 只有在 Check-All 整体结论通过、问题数为 0、无阻塞、无部分验证、无待用户接受的实质剩余风险时才算严格通过。标准报告输出后,同一轮进入 Phase 3.3 `trellis-update-spec`;`no-op|written` 再由其加载 `trellis-push`,`needs-review` 停止。
397
- 3. findings、blocked、部分验证或实质剩余风险均不满足条件:输出标准报告并停止,不运行 Update-Spec,也不生成 Git 计划。原始 Git 请求不授权自动修复、忽略问题或扩大 Git 权限。
398
- 4. 没有匹配 direct Git intent 的普通 interactive 检查保持原行为:报告后立即停止并等待用户选择。
93
+ ### Step 2:执行检查并收集结果
399
94
 
400
- ### 交互式下一步引导
95
+ 按 profile 检查三个维度。普通问题进入 `CHK-*`;低风险文档漂移候选进入 `DOC-*`。同一根因合并,不因数量多而静默省略。
401
96
 
402
- 本节只适用于非 validated auto-loop;Auto-Loop Return Gate 已经先行完成 `record + next`。
97
+ ### Step 3:处理文档漂移自修
403
98
 
404
- 所有 interactive 标准报告都必须在末尾输出 `### 下一步`,并按以下首个命中分支给出一个明确主动作:
99
+ 读取 `references/document-drift-auto-remediation.md`。在最终报告前:
405
100
 
406
- 1. 有 findings:提示用户回复 `修复全部`、精确问题 ID 或 `仅保留报告`;不得重复提出逐项确认。
407
- 2. 有 blocked、部分验证或实质剩余风险:指出解除阻塞所需的精确决策、授权或验证,以及完成后重新运行 Check-All;涉及生产、外部系统或破坏性副作用时只引导用户授权,不自行执行。
408
- 3. direct Git 严格通过:说明本轮正在进入 `trellis-update-spec`,不要求用户再次回复“继续”或确认 Git 计划。
409
- 4. 无 direct Git intent 且严格通过:提示用户回复 `继续`,下一轮进入 `trellis-update-spec`,再由 `trellis-push` 生成提交计划。
101
+ - inline:主会话应用允许的 `DOC-*` 修复并做定向验证。
102
+ - subagent:主会话审阅 subagent 返回的 `DOC-*` 候选,只应用满足白名单且无歧义的文档修复。
103
+ - auto-loop:主会话应用允许的 `DOC-*` 修复后再 `record`;若只存在已修复文档漂移且无剩余 `CHK-*`,结果可为 `ok`,摘要必须包含自动修复说明。
410
104
 
411
- 停止边界只控制是否自动推进,不能让报告在没有下一步提示的情况下结束。
105
+ 不满足自动修复条件的文档问题转为 `CHK-*` 或剩余风险,按普通修复范围处理。
412
106
 
413
- 允许 Check-All 标准报告输出的内容只有:
107
+ ### Step 4:统一报告与分流
414
108
 
415
- - 各维度状态、问题数和问题清单;
416
- - 已执行验证及结果;
417
- - 未覆盖验证和剩余风险;
418
- - 总体结论;
419
- - 与当前结论匹配的唯一主动作引导;有问题时是一次修复范围选择,部分验证/阻塞时是补充决策或验证,通过时是 Phase 3.3 / Phase 3.4 指向。
109
+ 读取 `references/reporting-and-disposition.md`。报告必须展示:
420
110
 
421
- Check-All 不新增 direct Git 专用摘要,也不得自行生成提交计划、commit message、拟提交文件或要求用户确认提交;strict pass 后的 Git 计划仍由 Update-Spec disposition 和 `trellis-push` owner 生成。
111
+ - `check_profile`;
112
+ - 三个维度状态;
113
+ - 自动修复的 `DOC-*` 内容;
114
+ - 剩余 `CHK-*` 问题;
115
+ - 已执行验证和未覆盖风险;
116
+ - 与当前结论匹配的唯一下一步。
422
117
 
423
118
  ---
424
119
 
425
120
  ## 反模式
426
121
 
122
+ - 入口默认加载 full profile,导致 `auto` 被 full 语气带偏。
427
123
  - 发现一个普通问题就暂停询问一次。
428
- - 检查阶段直接修改代码、配置或测试。
429
- - 把 `trellis-check` 的自动修复指令带入 Check-All。
430
- - 未命中 Trigger 仍展开所有 Step 2 Dimension。
124
+ - 把 `trellis-check` 的自动修复指令带入普通 `CHK-*`。
125
+ - subagent 直接修改工作区。
126
+ - 把需求变更、验收标准、产品语义或设计取舍伪装成文档漂移自动修复。
127
+ - light 未命中完整穷举条件仍继续 light。
431
128
  - 无环境证据却把维度标记为通过。
432
- - 按检查步骤而不是实际影响划分严重度。
433
- - 同一根因拆成大量重复问题,或因问题多而静默省略。
434
- - subagent 自行选择修复范围或返回前修改工作区。
435
- - 报告后直接进入 commit/push。
129
+ - 报告后直接生成提交计划、commit message 或拟提交文件。